2017-02-10 2 views
2

Je suis un noob en C-programmation alors portez-moi et s'il vous plaît corrigez-moi si j'ai la mauvaise approche.Comment ignorer la fin de la ligne en lisant le fichier en C?

Je suis face à problème lors de la lecture de fichiers caractère par caractère C.

Comme vous pouvez le voir ci-dessous, apparemment, mon dossier a 400 caractères, mais lorsque je tente de les lire caractère par caractère, ils prennent jusqu'à 419 index. Je suppose qu'ils incluent aussi le caractère de fin de ligne. Je ne sais pas comment les ignorer. J'ai essayé d'utiliser continue comme vous pouvez le voir mais je suis incapable de les ignorer.

Voici mes données de fichier

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

Voici mon 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++; 
    } 
} 

Note: Je suis en train d'ajouter "gris (0x66)" Couleur en bitmap quand un personnage est 0 et "blanc 0xff" quand un caractère est autre chose que zéro. En d'autres termes, je dois faire la différence entre 0 et n'importe quel autre personnage et c'est dur et dérangeant avec le caractère de fin de ligne.

+3

En plus: 'int fgetc (FILE * stream);' ne retourne pas de type 'char'. Donc, changez 'char single' en 'int single 'afin que vous puissiez distinguer l'état EOF des données. Erreur de débutant fréquente, lisez toujours la page de manuel. –

+4

juste après avoir lu faire 'si (single == '\ n') continuer;' –

+1

Un autre côté sur le style: vous n'avez pas besoin de '} else {' lorsque le test précédent vous emmène ailleurs. –

Répondre

0

Le caractère de nouvelle ligne dans votre fichier est '\ n', tandis que '\ 0' fait référence au caractère nul d'un tableau. Remplacez donc ce dernier par le précédent, et '! =' Par '==' pour ignorer la lecture du caractère de retour à la ligne.

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

Vouliez-vous également inverser le test, donc 'if (single == '\ n') {continuer; } '? –

+0

Oui, merci! –

+1

Vous avez également corrigé le bogue 'char single; Documenter cette question aiderait le PO à l'éviter à l'avenir. – chqrlie