#include < stdio.h >
#include < string.h >
int main()
{
unsigned char a;
FILE *P;
P=fopen("mola.txt","r");
while((a=getc(P))!=EOF)
printf("%c",a);
}
这些代码有什么问题?当我编译它时会发出警告“由于数据类型的范围有限,比较总是如此。”这警告意味着什么?
答案 0 :(得分:7)
您要将getc
的结果存储在char
中。它应该是int
。它上面还有一个C FAQ。您还应该检查fopen
的返回值。
P=fopen("mola.txt","r");
if (NULL == P) {
perror("fopen"):
}
同样while
看起来很可疑。尝试缩进?
while((a=getc(P)) != EOF)
printf("%c",a);
答案 1 :(得分:1)
这意味着它所说的
由于数据类型的范围有限,总是如此。
相关数据类型的范围(a
,即unsigned char
)从0到255(真正UCHAR_MAX
);
EOF
值为-1
您正在将a
(从0到255)与-1
(a != -1)
条件永远是真的
答案 2 :(得分:1)
尝试:
#include <stdio.h>
#include <string.h>
int main()
{
int a;
FILE *P;
P=fopen("tryit2.c","r");
while(EOF != (a = fgetc(P))) {
printf("%c",a);
}
}
你有两个问题“getc()”返回一个整数而不是一个字符。而while语句在原始顺序中有一些奇怪的副作用。
答案 3 :(得分:0)
这意味着循环将落入无限循环,不允许程序在a=getc(p)
时退出。