我的 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;
我正在阅读 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;