#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