为什么这些c代码不起作用?这些怎么了?

时间:2011-07-07 10:24:26

标签: 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);

}

这些代码有什么问题?当我编译它时会发出警告“由于数据类型的范围有限,比较总是如此。”这警告意味着什么?

4 个答案:

答案 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)时退出。