2012-06-03 66 views
0

我正在編寫一個C程序,但沒有看到fputcfputs調用的結果。我需要幫助理解爲什麼會發生這種情況。爲什麼fputc和fputs輸出不能立即顯示?

#include <stdio.h> 
int main(void) 
{ 
    FILE *stream; 
    int file_state; 
    int input1=0; 
    stream = fopen("data3.txt", "w"); 
    if (stream == NULL) 
    puts("file open error"); 
    puts("input data"); 
    while (input1 != EOF) 
    { 
     input1=fgetc(stdin); 
     putchar(input1); 
     //fputc(input1, stdout); 
     //fprintf(stream, "tee"); 
     //fputc('A', stream); 
     //fputs("sass", stream); 
    } 
    file_state=fclose(stream); 
    if(file_state==EOF) 
    puts("file close error"); 
    return 0; 
} 

問題是,fputcfputs不能正常工作。 我在mac獅子64位,並在終端上使用make./file_name

在while循環中,如果我寫

putchar(input1); 

它輸出(打印)到終端。 但是,所有註釋行都不起作用。

fputc(input1, stdout); 

還在終端上打印空行。

該程序創建一個文件,但似乎是完全空的。可能是什麼問題呢?

+1

您應該檢查輸出函數的返回值 – user411313

回答

7

當你還在打開文件時,你正在查看文件的內容嗎?請注意文件寫入被緩衝,因此在流關閉/刷新之前您可能無法看到數據。

如果是這種情況,您可以嘗試呼叫fflush(stream)作爲循環的最後一行。或者等到文件關閉,當然。

另請注意,如果您使用Ctrl-C結束程序,則數據可能永遠不會寫入!

stdout不同的是,此流通常是行緩衝,這意味着該流爲自動刷新,只要你輸出新行字符,但普通流都沒有。

+0

非常感謝! – Maurice

+0

非常感謝!這是很多的幫助! – Maurice

+0

@SML - 不客氣!但請記住,如果您發現答案令人滿意,則應將其標記爲已接受。 – rodrigo

0

可能是你有問題,因爲有些字符串不是以'\ 0'結尾。

stream = fopen("data3.txt\0", "w\0"); 
if (stream == NULL) 
    puts("file open error\0"); 
puts("input data\0"); 
while (input1 != EOF) 
    { 
    input1=fgetc(stdin); 
    putchar(input1); 
    //fputc(input1, stdout); 
    //fprintf(stream, "tee\0"); 
    //fputc('A', stream); 
    //fputs("sass\0", stream); 
    } 
file_state=fclose(stream); 
if(file_state==EOF) 
    puts("file close error\0"); 
return 0; 
+0

字符串文字總是空終止。 –

相關問題