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

What's wrong with my C character and line counting program?

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

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

在您的代码中,当您点击时

 i= i + 1;

i的初始值不确定。因此,整个程序调用 undefined behavior。您需要初始化 i.

详细说明,i是一个自动局部变量,除非明确初始化,否则内容是不确定的。在这种情况下使用不确定的值将导致 UB。

也就是说,char 无法保存 EOF 的值,请将类型更改为 int


在那之后,你的逻辑就错了。 getchar() 本身不是一个循环,你需要在 while 循环体内不断调用 getchar() 来更新 c 的值,用于条件检查 while.

您错过了初始化:

int i = 0;

int main()

很好。不是 main() 也不是 void main()。保持这种方式。

{
char c;

不好。 getchar() returns 一个 int.

int i;

不好。未初始化,值不确定。您将增加 -7445219,或者可能是肾饼,谁知道呢。

c = getchar();

好的,你已经读完了一个字符。

while (c != EOF)

但是您不能将它与 EOF 进行比较,因为 EOF 不适合 char

    i= i + 1;

看来您忘记了在循环体中执行某些操作。可能会发生一些变化 c 以便您的循环有机会完成。

printf("%d",i);

建议在输出的最后一行添加一个换行符。

}

这就是所有人。

你只需要为"i"

添加一个初始化

int i = 0;