2011-07-07 43 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 - 哎呀,貼錯了版本!感謝您指出! –