EOF在这个方面真的有用吗?

时间:2015-04-28 07:26:06

标签: c eof

#include<stdio.h>
#include<conio.h>

int main() {
    long nc;
    nc = 0;

    while (getchar()!= EOF){
        ++nc;
        printf("%ld\n", nc);
    }

    return 0;
}

我的问题是:当我输入数字或字符时,它会增加两次&gt;。 例如:我运行程序,输入1,然后输出

1
2

有人可以告诉我为什么&gt;&lt;原因是不是假设只增加1?并且程序将要显示的nc的值是1?那么当我输入另一个数字或字符时,它会变为2?

2 个答案:

答案 0 :(得分:1)

输入任何数字后,您按 Enter 键 并且'\n' != EOF所以它运行了两次。

int main() {
long nc;
nc = 0;
    while (getchar()!= '\n'){ // check for enter key here.
      ++nc;
      printf("%ld\n", nc);
    }
return 0;
}

答案 1 :(得分:1)

输入数字并按Enter键时,会将另一个\n字符传递给标准输入缓冲区。 getchar读取该数字,在缓冲区中留下\ n。在循环的下一次迭代中,getchar在您按下任何字符之前读取\n,因此在第二次时在内部.Hence值打印两次,因为\n不存在。

在条件下使用以下,这将解决问题。

while(getchar() != '\n');  

这会占用任意数量的\ n。