#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);
}
这些代码有什么问题?当我编译它时会发出警告“由于数据类型范围有限,比较总是如此”。这个警告意味着什么?为什么这些c代码无法正常工作?这些有什么不对?
#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);
}
这些代码有什么问题?当我编译它时会发出警告“由于数据类型范围有限,比较总是如此”。这个警告意味着什么?为什么这些c代码无法正常工作?这些有什么不对?
您正在将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);
这意味着循环将陷入无限循环,不允许程序在a=getc(p)
时退出。
这意味着正是它说
比较总是正确的,由于数据类型范围限制。
在问题(该a
,这是unsigned char
)的数据类型的范围是从0到255(真UCHAR_MAX
);
的EOF
值为-1
您与-1
(a != -1)
比较a
(从0到255)的条件永远是真
尝试:
#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语句在原始顺序中有一些奇怪的副作用。
你没有修复unsigned char到int,因为它应该做!就像OP写的一样! – ShinTakezou
@Shin - 哎呀,贴错了版本!感谢您指出! –
它没有打印任何东西只是一个空白输出。 – cody
尽量使用大括号,即使对于一条线,它也更干净。 C不是Python。 – 2011-07-07 10:35:54
对不起,我得到了我犯的错误,你已经完成了你的cnicutar – cody