gpt4 book ai didi

c - 我的 C 程序未提供预期输出

转载 作者:行者123 更新时间:2023-11-30 20:20:09 26 4
gpt4 key购买 nike

我是编程初学者,正在学习 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 上运行它,并收到运行时错误,提示“超出时间限制”

没有输出可能是什么原因。是因为我需要以某种方式指定 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?为了验证这一点,我尝试将字符与“h”进行比较并得到相同的输出。

是否是因为 getc 返回整数并且与文本中的任何字符都不匹配?

非常感谢您的所有见解。代码最终成功了。干杯

最佳答案

你的编译器应该警告你这一点:

while (c = getc(stdin) != EOF)

warning: using the result of an assignment as a condition without parentheses [-Wparentheses]

因为 != (不等式)有 higher priority= (赋值)上,该行被解释为

while (c = (getc(stdin) != EOF))
^ ^

请注意意外的括号,因此 c 的值只能为零或一,因此 c=='a' 永远不会像 ' 那样为 true a' 永远不等于 1。

将其更改为

while ((c = getc(stdin)) != EOF)
^ ^

可以给你想要的结果。

您应该考虑删除FILE* fp,因为它根本不执行任何操作。它定义了一个指针,但以后从未使用过,并且可能被编译器优化掉。

关于c - 我的 C 程序未提供预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com