我是编程的初学者,我正在学习C语言。我试图从文件中读取内容并对其进行一些处理。
以下是我写过的程序:
#include <stdio.h>
int main()
{
FILE *fp ;
int k = 0 ;
char c ;
while (c = getc(stdin))
{
if (c == 'a')
{
++k;
}
}
printf ("the value of k is %i" , &k) ;
}
文件输入了:
> hkjkjaaaaaaaaaak
>
> hjkjlkaaaaaaaaaghgh
>
> hjhkjklklklklklk
但是我没有在控制台中获得任何输出。 我在另一个在线IDE上运行它,我得到一个运行时错误说&#34;超出时间限制&#34;
缺少产出的原因是什么? 是因为我需要以某种方式指定EOF字符,如果程序一直在运行而没有运行?
在从答案中获得帮助后,我用以下代码替换了代码:
#include <stdio.h>
int main()
{
FILE *fp ;
int k = 0 ;
char c ;
while (c = getc(stdin) != EOF)
{
if (c == 'a')
{
++k;
}
}
printf ("the value of k is %i" , k) ;
}
这次程序运行了,我得到一个输出说:
the value of k is 0.
从一开始就以某种方式达到EOF吗?为了验证这一点,我尝试将角色与“&#39; h&#39;得到了相同的输出。
是因为getc返回整数而且这与文本中的任何字符都不匹配吗?
非常感谢所有的见解。代码最后工作.Cheers
答案 0 :(得分:1)
你的编译器应该警告过你:
while (c = getc(stdin) != EOF)
警告:将作业结果用作没有括号[
的条件-Wparentheses
]
由于!=
(不等式)的higher priority超过=
(赋值),因此该行被解释为
while (c = (getc(stdin) != EOF))
^ ^
请注意意外的括号,因此c
的值只能为零或一,因此c=='a'
永远不会为真,因为'a'
永远不会等于1.
将其更改为
while ((c = getc(stdin)) != EOF)
^ ^
可以给你想要的结果。
您应该考虑删除FILE* fp
,因为它根本不做任何事情。它定义了一个指针但以后从未使用过,可能会被编译器优化掉。