2017-02-10 4 views
2

Ich bin ein Neuling in C-Programmierung, also ertragen Sie mich und bitte korrigieren Sie mich, wenn ich den falschen Ansatz habe.Wie ignoriert man Zeilenende beim Lesen der Datei in C?

I Problem ist vor, während in der C-Datei zeichenweise Lesen

Wie Sie unten sehen können, offenbar, meine Datei hat 400 Zeichen, aber wenn ich versuche, ihnen Zeichen für Zeichen zu lesen, sie nehmen zu 419 Indizes. Ich nehme an, dass sie auch End-of-Line-Zeichen enthalten. Ich weiß nicht, wie ich sie ignorieren soll. Ich habe versucht, continue zu verwenden, wie Sie sehen können, aber ich kann sie nicht ignorieren.

Hier ist meine Dateidaten

00000000000000000000 
00000000000000000000 
00000000000000000000 
00555555555555555500 
00000000000000000300 
00000000000000000300 
00000000000000000300 
00000000000000000300 
00000000000000000300 
00000000000000000300 
00444444444444444300 
00400000000000000000 
00400000000000000000 
00400000000000000000 
00400000000000000000 
00400000000000000000 
00777777777777777700 
00000000000000000000 
00000000000000000000 
00000000000000000000 

Hier ist mein Code:

FILE *pToFile = fopen("toConvert.txt", "r"); 

char single; 
i = end_color; 
while ((single = fgetc(pToFile)) != EOF) { 

    if (single != '\0') { 
     continue; 
    } else { 
     if (single !='0') { 
      bitmap[i] = 0x66; 
     } else { 
      bitmap[i] = 0xff; 
     } 
     i++; 
    } 
} 

Hinweis: Ich versuche, "grau (0x66)" Farbe in Bitmap, wenn ein Zeichen hinzufügen ist 0 und "weiß 0xff", wenn ein Zeichen anders als Null ist. Mit anderen Worten, ich muss zwischen 0 und jedem anderen Charakter unterscheiden und es ist hart und störend mit dem Ende der Zeile Charakter.

+3

Beiseite: 'int fgetc (FILE * stream);' gibt 'char' Typ nicht zurück. Ändern Sie 'char single;' in 'int single;', damit Sie den EOF-Status von den Daten unterscheiden können. Häufige Neuling Fehler, lesen Sie immer die man-Seite. –

+4

direkt nach dem Lesen tun 'if (single == '\ n') weitermachen;' –

+1

Eine andere beiseite auf Stil: Sie brauchen kein '} else {', wenn der vorherige Test Sie woanders hinführt. –

Antwort

0

Das Zeilenvorschubzeichen in Ihrer Datei ist '\ n', während '\ 0' sich auf das Nullzeichen eines Arrays bezieht. Ersetzen Sie also das letzte durch das erstere und '! =' Durch '==', um das Einlesen des Zeilenvorschubzeichens zu überspringen.

FILE *pToFile = fopen("toConvert.txt","r"); 
// single as int (thanks to Weather Vane comment) 
int single; 
int i = end_color; 
while((single = fgetc(pToFile)) != EOF){ 

    if(single == '\n'){ 
     continue; 
    }else{ 
     if(single !='0'){ 
      bitmap[i] = 0x66; 
     } 
     else{ 
      bitmap[i] = 0xff; 
     } 
     i++; 
    } 
} 
+1

Wollten Sie auch den Test invertieren, also 'if (single == '\ n') {continue; } '? –

+0

Ja, danke! –

+1

Sie haben auch den Fehler 'char single;' behoben. Die Dokumentation dieses Problems würde dem OP helfen, dies in Zukunft zu vermeiden. – chqrlie

Verwandte Themen