fgetc在打击'时的行为\n';

fgetc在打击'时的行为\n';,c,io,C,Io,下面是我想从文件中获取输入并计算每行中的字符数的代码,但它会在第一行停止 #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"); retur

下面是我想从文件中获取输入并计算每行中的字符数的代码,但它会在第一行停止

 #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);
         }  
然后把它放出去

 1: 6
但我所期望的是

 1: 6
 2: 6
如何使用getc实现这一点?
我看到许多关于getc的答案在遇到“\n”时表现不同,但它们似乎与我想要的太不同了。

您的代码无法正确处理最后一行结尾没有“\n”字符的情况

这通常由循环后的条件处理:

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

+1是的,我意识到了我的错误,这是有效的,我也可以用我力所能及的“\n”(即,点击回车键)结束我的文件。
while ((c = fgetc(instream)) != EOF ){
    ...
}
// Handle the last line:
if (charcount != 0) {
    printf("%3d: %d\n", linenum, charcount); 
}