2016-12-02 11 views
-1

Hier ist der Code meiner Funktion:fgets liest drei '' n“, wenn meine Datei mit Text beginnt

char str[DIM_STR]; 
char tipo[DIM_TIPO]; 
int j=0, var=0; 

for(j=0; j<DIM_STR; j++) 
    str[j]='\0'; 

for(j=0; j<DIM_TIPO; j++) 
    tipo[j]='\0'; 


while(fgets(str, DIM_STR, fp)!=NULL){ 

    if(str[0]=='\n') 
    { 
     printf("line %d,LINHA EM BRANCO\n", var); 
    } 

    else 
    { 
     sscanf(str, "%s", tipo); 

     if(strcmp(tipo, "JANELA")==0){ 

      sscanf(str, "%s %d %d", tipo, &info_janela[DIM_JANELA][DIM_X], &info_janela[DIM_JANELA][DIM_Y]); 
     } 

     if(strcmp(tipo, "X")==0){ 

      sscanf(str, "%s %d %d", tipo, &info_janela[DIM_FIS_X][X_FIS_MAX], &info_janela[DIM_FIS_X][X_FIS_MIN]); 
     } 

     if(strcmp(tipo, "Y")==0){ 

      sscanf(str, "%s %d %d", tipo, &info_janela[DIM_FIS_Y][Y_FIS_MAX], &info_janela[DIM_FIS_Y][Y_FIS_MIN]); 
     } 

     if(strcmp(tipo, "C")==0){ 

      sscanf(str, "%s %d %d", tipo, &info_janela[CENTRO_REF][X_0], &info_janela[CENTRO_REF][Y_0]); 
     } 

     if(strcmp(tipo, "ESTRELAS")==0){ 

      sscanf(str, "%s %d", info_tamanho[ESTRELAS].tipo, &info_tamanho[ESTRELAS].tamanho); 

     } 

     if(strcmp(tipo, "PLANETAS")==0){ 

      sscanf(str, "%s %d", info_tamanho[PLANETAS].tipo, &info_tamanho[PLANETAS].tamanho); 

     } 

     if(strcmp(tipo, "ASTEROIDES")==0){ 

      sscanf(str, "%s %d", info_tamanho[ASTEROIDES].tipo, &info_tamanho[ASTEROIDES].tamanho); 

     } 

     if(strcmp(tipo, "FRAGMENTOS")==0){ 

      sscanf(str, "%s %d", info_tamanho[FRAGMENTOS].tipo, &info_tamanho[FRAGMENTOS].tamanho); 

     } 

    } 

    var++; 

} 

Liste definiert:

#define DIM_TIPO 10 
#define DIM_INFO_CORPOS 4 
#define DIM_STR 100 

#define DIM_JANELA 0 
#define DIM_X 0 
#define DIM_Y 1 

#define DIM_FIS_X 1 
#define X_FIS_MIN 0 
#define X_FIS_MAX 1 

#define DIM_FIS_Y 2 
#define Y_FIS_MIN 0 
#define Y_FIS_MAX 1 

#define CENTRO_REF 3 
#define X_0 0 
#define Y_0 1 

#define ESTRELAS 0 
#define PLANETAS 1 
#define ASTEROIDES 2 
#define FRAGMENTOS 3 

Dies ist die Datei:

Es beginnt mit Text - JANELA ..., also warum liest es zuerst 3 Leerzeilen?

Hier ist die Ausgabe:

line 1,BLANK LINE 
line 4,BLANK LINE 
line 6,BLANK LINE 
600 
400 
-1000 
1000 
-900 
900 
300 
200 

EDIT: Hier ist die Datei: https://www.dropbox.com/s/ky1ctic8f35y81j/sim_config.txt?dl=0

+3

Blick auf den Inhalt der Eingabedatei einen Hex-Dumper/-Editor verwenden. – alk

+5

Auch: Wie ist 'str' definiert? – alk

+0

Und nach diesen drei neuen Zeilen, was bekommst du dann? – alk

Antwort

1

einfach eingefügt Ihr Dateiinhalt (aus der Datei in Dropbox) in einem neuen Fenster gedit und Säge gibt es 3 neue Zeilen vor dem Wort JANELA. Nach dem Download zeigte die Datei keine Leerzeile und die Ausgabe Ihres Fragments war auch keine Leerzeile. Laden Sie die Datei also aus der Dropbox herunter und verwenden Sie sie. mein Code:

FILE *fp=fopen("sim_config.txt","a+"); 

char * str=malloc(sizeof(char)*100); 

while(fgets(str, sizeof(str), fp)!=NULL){ 

    if(strcmp(str,"\n")==0 || (strcmp(str,"\r\n")==0)) 
    { 
     printf("BLANK LINE\n\n"); 
    } 
    else 
    { 
     printf("ok\n"); 
    } 
    } 
} 

Ausgabe: ok ok BLANK LINE

BLANK LINE

ok ok ok ok BLANK LINE

ok ok BLANK LINE

ok ok ok ok ok ok ok ok /// keine Leerzeilen

+3

'sizeof (str)' gibt die Größe eines Char-Zeigers (4 oder 8) zurück. –

+1

@JohnnyMopp: aber mindestens 'fgets()' überschreibt nicht das Ende des Puffers, der zugewiesen wurde! Sie sind natürlich vollkommen richtig: Die Größe von 'fgets()' sollte die Größe des zugewiesenen Puffers sein. Oder der Puffer sollte in 'char str [4096];' oder etwas Ähnliches geändert werden und dann den bestehenden Aufruf von 'fgets()' verwenden. –

Verwandte Themen