我的C字符和行计数程序有什么问题?

时间:2017-02-20 14:57:16

标签: c while-loop getchar

我正在阅读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(),但同样的事情发生了。

下一个例子是计算输入中的行数,同样的问题也存在。

4 个答案:

答案 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;

添加一个inicialization

int i = 0;

答案 3 :(得分:0)

你错过了初始化:

int i = 0;