c入门的行计数问题,为什么结果总是0?

行计数程序:

1 #include
2
3 main()
4 {
5 int c, nl;
6
7 nl = 0;
8 while ((c = getchar()) != EOF);
9 if (c == '\n')
10 ++nl;
11 printf("%d\n", nl);
12 }
13
执行:
Press ENTER or type command to continue
\n
\n
\n
\n
0

shell returned 2

Press ENTER or type command to continue

Press ENTER or type command to continue
a
a
a
a
0

shell returned 2
最后一行按crtl+d,为什么都是0。还有最后的shell returned为什么是2?谢谢

#include

int main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF){
if (c == '\n')
++nl;
}
printf("%d\n", nl);
}
你的程序没完整,不太清楚你问的那个shell return 2。这是我根据你那个程序改的,你主要的错误是while后面要加一个‘{’把判断换行符的语句包括进去,不然按照你的加‘;’这个while循环什么都不执行,只是一直读入字符判断是不是结束而已。别听上面两个的,没EOF怎么判断while结束?我们按下ctrl+z(你的是d应该是Linux下的,我的是windows的)表示输入结束,这点多编程大家都知道=。=不知道他们怎么想的

错误太多,c = getchar();c应该定义成char。while语句加个大括号{ };不然自加没用,while不加{ }只会执行他的下一句。
还有EOF没必要吧!

EOF 是 End Of File 的缩写,没有用过文件,就不用 EOF 的标志。
输入判断 ‘\n’,不能输入 \n,而应该直接按回车键。

直接去掉while语句后的分号就可以了
while循环执行后边的语句是一条(或通过花括号得到一个块),因为直接分号了,认为循环的是空语句
去掉后则认为满足循环后执行if判断语句,而++nl;又属于判断语句包含的内容,所以即使没有花括号也可以,
但不能在循环语句后有分号,这个必须注意,任何循环都一样。