2017-02-20 39 views
-1

我读Kernighan的Ritchie和有这个字计数程序,所以我想实现我的C字符和行计数程序有什么问题?

#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

请注意,C++不是C. –

+1

如果c!= EOF“while while循环将会无限 –

+3

int i = 0,c; while((c = getchar())!= EOF) i = i + 1;' – BLUEPIXY

回答

7

在你的代码,当你打

i= i + 1; 

i的初始值是不确定的。所以,整个程序调用undefined behavior。你需要初始化i

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

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


之后,你在逻辑上是错误的。 getchar()本身并不是一个循环,您需要在while循环体内继续调用getchar()以更新c的值,用于while中的条件检查。

+0

oops,是的,我将0赋给了i,但是这并没有解决问题,也没有将变量c的类型更改为int。我编辑了这个问题。 – user127

+0

...和['getchar'](http://www.cplusplus.com/reference/cstdio/getchar/)返回一个“int”,而不是“char”。 –

0

您错过了初始化:

int i = 0;

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); 

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

} 

这就是所有人。

1

你只需要添加一个inicialization为 “我”

INT I = 0;