2012-02-21 78 views
0

這是我的代碼。getc(fp)造成麻煩

#include<stdlib.h> 
#include<stdio.h> 
int main(int argc,char** argv) 
{ 
    char a; 
    a=9; 
    FILE * fp; 
    fp=fopen(argv[1],"r"); 
    while(a!= EOF) 
    { 
     a=fgetc(fp); 
     printf("\n%d",a); 
    } 
} 

的輸出,這是正常的,但最後我得到一個奇怪的字符與-1(因爲我打印整數值。

如何在EOF只? 還有什麼阻止它這種性格

+2

不要忘記檢查fopen()返回值 – ydroneaud 2012-02-21 13:14:39

+0

並且不要忘記fclose() – 2012-02-21 15:27:18

回答

2

除了在其他答案的方法,你也可以這樣做:

while ((a = fgetc(fp)) != EOF) 
{ 
    printf("%d\n", a); 
} 

現在你有一些替代解決方案。 :)

編輯:作爲R ..所以好心提醒我們,你還必須的a的類型更改爲int

+0

這是C中最常見的解決方案 – 2012-02-21 15:26:45

+1

你錯過了錯誤的類型...... – 2012-02-21 15:57:14

2

要打印的EOF字符(-1)如你不檢查是否EOFfgetc()後立即遇到循環的結構變更爲:?

int a; /* not char, as pointed out by R... */ 

for (;;) 
{ 
    a = fgetc(fp); 
    if (EOF == a) break; 
    printf("\n%d", a): 
} 
+0

這並不能解決'a'類型錯誤('char'而不是'int')的問題。 – 2012-02-21 15:56:49

+0

@R ..,謝謝 - 錯過了。更新。這是你的失望嗎? – hmjd 2012-02-21 16:10:38

+0

是的,但希望在盲目接受某些事情之前讓OP注意下面的正確答案。現在刪除它。 – 2012-02-21 16:15:07

0

你爲什麼不與此條件停止while

do {...}while(a != EOF) 

我想,一個GOT EOF值閱讀。 所以,你做週期的額外時間

+0

這將在循環中至少運行一次,如果'fgetc'立即返回'EOF',仍然會打印'-1'。 – 2012-02-21 13:29:02

+0

@JoachimPileborg他可以檢查初步的條件... – DonCallisto 2012-02-21 13:29:51

+0

你也是這樣...... – 2012-02-21 15:57:29

1

您需要讓a的類型爲int,因爲該類型是返回類型fgetc(),並且需要正確表示EOF。