2 votes

Comportement de fgetc lorsqu'il frappe ' \n '

Voici le code Je veux prendre l'entrée du fichier et compter le nombre de caractères dans chaque ligne, mais il s'arrête à la première ligne elle-même.

 #include<stdio.h>
 int main(){
 FILE *instream; 
int c;
char in;
int linenum = 1; 
int charcount = 0;
   if ((instream = fopen("in.txt","r+")) == NULL) { 
      printf("Unable to open file3\n");
      return(0);
}
while ((c = fgetc(instream)) != EOF ){ 
if(c == '\n') {

   printf("%3d: %d\n",linenum,charcount); 
   linenum++;
   charcount = 0;
}

else{

      charcount++; 
  }
} 

  fclose(instream);
         }  

Voici le format du fichier

abcdef
mnopqr

Et la sortie

 1: 6

Mais ce que j'attendais était

 1: 6
 2: 6

Comment puis-je faire cela en utilisant getc ? J'ai vu beaucoup de réponses sur le fait que getc se comporte différemment lors de la rencontre de ' \n mais ils semblent trop différents de ce que je veux.

4voto

dasblinkenlight Points 264350

Votre code ne gère pas correctement la situation où la dernière ligne n'a pas de '\n' à la fin.

Ceci est généralement traité par une conditionnelle après la boucle :

while ((c = fgetc(instream)) != EOF ){
    ...
}
// Handle the last line:
if (charcount != 0) {
    printf("%3d: %d\n", linenum, charcount); 
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X