我正在阅读Kernighan Ritchie以及这个角色计数程序,所以我尝试了实施
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c;
int i;
c = getchar();
while (c != EOF)
i= i + 1;
printf("%d",i);
}`
当我编译并运行此代码时,在输入一些字符后,之后没有输出。没有打印号码,我无法弄清楚原因。代码看起来很好。我也试过使用scanf(),但同样的事情发生了。
下一个例子是计算输入中的行数,同样的问题也存在。
答案 0 :(得分:7)
在您的代码中,当您点击
时 i= i + 1;
i
的初始值是不确定的。因此,整个程序调用{{3}}。您需要初始化i
。
详细说明,i
是一个自动局部变量,除非明确初始化,否则内容是不确定的。在这种情况下使用不确定的值将导致UB。
也就是说,char
无法保留EOF
的值,请将类型更改为int
。
之后,你的逻辑错了。 getchar()
不是它自己的循环,你需要在getchar()
循环体内调用while
来更新c
的值,用于条件检查{ {1}}。
答案 1 :(得分:2)
int main()
好。不是main()
而不是void main()
。保持这种方式。
{
char c;
坏。 getchar()
会返回 int 。
int i;
坏。没有初始化,价值是不确定的。你要增加-7445219,或者也许是一个知道的肾馅饼。
c = getchar();
好的,你读过一个字符。
while (c != EOF)
但您无法将其与EOF
进行比较,因为EOF
不适合char
。
i= i + 1;
看起来你忘了在循环体中做某事。可能会改变c
的东西,以便你的循环有机会完成。
printf("%d",i);
建议在输出的最后一行添加换行符。
}
那是所有人。
答案 2 :(得分:1)
您只需为&#34; i&#34;
添加一个inicializationint i = 0;
答案 3 :(得分:0)
你错过了初始化:
int i = 0;