gpt4 book ai didi

c - 为什么我的内循环只运行一次?

转载 作者:太空狗 更新时间:2023-10-29 14:52:15 26 4
gpt4 key购买 nike

交流

#include <stdio.h>

int main(int argc, char *argv[])
{

int i, counter=0;
char c;

FILE *file=fopen("a.txt","r");

for (i = 0x41 ; i < 0x45; i++)
{
printf("%c(%x) ",i ,i);
while ((c = fgetc(file)) != EOF)
{
if (i == (char) c)
counter++;
}
printf("%d\n", counter);
counter=0;
}
fclose(file);
return 0;
}

a.txt

AAABBBAAA

我不明白为什么 for 循环运行完美,但 while 循环只运行一次。

输出看起来像

enter image description here

最佳答案

阅读man page对于 fgetc(),(强调我的)

fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.

因此,一旦 while 循环运行,一旦 fgetc() 返回 EOF 它将退出,并且它将继续返回 EOF 用于所有连续调用。

您需要将文件指针重置为流的开头(使用 rewind()fseek() )以从头开始。

也就是说,

  • fgetc() 返回一个 int 和一个 char 太短,无法存储 所有 可能的返回值(例如,EOF 本身)。将 c 的类型更改为 int
  • 对于托管环境,int main() 至少应为 int main(void) 以符合标准。

关于c - 为什么我的内循环只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417710/

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