2013-03-29 254 views
0

我試圖使用fgets()但我遇到了以下的問題在C讀取文件:雖然我可以打開該文件成功地利用fopen()奇怪的問題

if (file=fopen(filename, "r") == NULL) 
{ 
    printf("Couldn't open specified file. Please try again."); 
    exit(1); 
} 

我無法讀取任何內容。我正在使用以下循環,儘管沒有打印任何內容,並且執行終止成功。

while ((fgets(inputLine, 1023, file)) != NULL) 
{ 
    printf("Hello world"); 
} 

這與實際文件名,文件大小或文件內容無關。沒有任何東西可以工作,沒有任何東西在調試器中顯示爲錯誤。我已經嘗試了樣本文件在以下直接複製並粘貼:

test.txt 
#include <stdio.h> 
int main() 
{ 
     printf("Hello World"); 
} 

你有任何的猜測,爲什麼發生這種情況?

注意:我已經採取this S'O問題的循環代碼,所以我想它是正確的。

+1

不要忘記在'stdout'的消息錯誤末尾添加'\ n'來刷新流。 – md5

+0

程序結束時應該刷新。 – Barmar

+0

您能否顯示整個程序源? – suspectus

回答

6

這是不正確的:

if (file=fopen(filename, "r") == NULL) 

嘗試:

if ((file=fopen(filename, "r")) == NULL) 

他們的方式你寫它相當於file = 0(假設該文件被成功地打開。如果不是,它是一樣的。 file = 1)。這不是你想要的。

+0

非常感謝。有時我很分心。我後來自己刪除了這些括號,我忘了把它們放回去。 –

0

除了你正在做的fopen條件的錯誤事實,也有與片段如一個潛在的問題:

while ((fgets(inputLine, 1023, file)) != NULL) 
{ 
    printf("Hello world"); 
} 

默認情況下,標準輸出流stdout行緩衝。這意味着您應該添加一個\n或致電fflush強制數據被有效寫入。

fflush(stdout);