2011-07-07 71 views
0
#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代码无法正常工作?这些有什么不对?

回答

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); 
+0

它没有打印任何东西只是一个空白输出。 – cody

+0

尽量使用大括号,即使对于一条线,它也更干净。 C不是Python。 – 2011-07-07 10:35:54

+0

对不起,我得到了我犯的错误,你已经完成了你的cnicutar – cody

0

这意味着循环将陷入无限循环,不允许程序在a=getc(p)时退出。

1

这意味着正是它说

比较总是正确的,由于数据类型范围限制。

在问题(该a,这是unsigned char)的数据类型的范围是从0到255(真UCHAR_MAX);

EOF值为-1

您与-1

(a != -1) 

比较a(从0到255)的条件永远是真

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语句在原始顺序中有一些奇怪的副作用。

+0

你没有修复unsigned char到int,因为它应该做!就像OP写的一样! – ShinTakezou

+0

@Shin - 哎呀,贴错了版本!感谢您指出! –