交流转换器
#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
循环只运行一次。
输出看起来像
答案 0 :(得分:7)
阅读fgetc()
fgetc()
,(强调我的)
EOF
从流读取下一个字符,并将其作为unsigned char强制转换为int,或者在文件末尾或错误时为while
。
因此,一旦fgetc()
循环运行,它将在EOF
返回EOF
后退出,并且将继续为所有后续调用返回fgetc()
。
您需要将文件指针重置为流的开头(使用man page或rewind()
)从头开始重新开始。
那就是说,
int
返回char
,而EOF
太短,无法存储所有可能的返回值(例如,c
本身) 。将int
的类型更改为int main()
。int main(void)
至少应$state.go('editUser', {id: 0, pid: 0});
// or In your view :
<a ui-sref="editUser({id:0,pid:0})">Add New user</a>
符合标准。答案 1 :(得分:3)
在for
循环的第一次运行中,整个文件都用完了,你永远不会重置它。因此它只会成功搜索字符0x41
。
您需要在while
循环后执行这两项操作之一:
fseek(file, 0, SEEK_SET);
rewind(file);
答案 2 :(得分:3)
这应该适合你:
#include <stdio.h>
int main(void)
{
int i, counter=0;
int 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 == c) counter++;
}
rewind(file);
printf("%d\n", counter);
counter=0;
}
fclose(file);
return 0;
}