2016-04-28 72 views
-2

我寫了一個程序,它必須在inf while循環中工作。在循環中,程序必須保存一些數據到文件並關閉這個文件。在循環中有睡眠功能,睡眠程序10秒鐘。然後我想檢查文件中的內容,但它是空的。如果沒有環路的一切運行的程序是OKC程序不會保存到while循環中的文件

完整的代碼是相當巨大的,所以我有一個短版

main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "awt"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     fprintf(fp, "%s",'this is saved text'); 
     fclose(fp); 
     sleep(10); 
    } 
} 

有任何想法如何正確地關閉該文件能夠讀取,而睡眠functiion DATAS ?

(這是在Linux上運行)

+2

'a'和'w'模式是互斥的。你可以刪除'W'並重新檢查嗎? – wRAR

+2

與你的問題沒有直接關係,但'printf(「打開保存文件時出現錯誤\ n」);'應該跟着'continue;'。,否則你最終會得到'fprintf(fp .. .. 。)'哪裏'fp'是'NULL'。 –

+0

wRAR它並沒有幫助 – kmbm

回答

1

你的代碼必須

int main() 
{ 
    FILE* fp; 
    while(1) 
    { 
     fp=fopen(SAVE_FILE, "at"); 
     if(fp==NULL) 
     { 
      printf("Error while opening the save file \n"); 
     } 
     else 
     { 
      fprintf(fp, "%s\n","this is saved text"); 
      fclose(fp); 
     } 
     sleep(10); 
    } 
} 

你寫要保存'之間的字符串。您必須使用"作爲字符串文字。

此外,你可以打開文件只有一個選項。

編譯時應該總是使用-Wall選項。 gcc向你顯示你的代碼的警告。

test.c:662:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=] 
     fprintf(fp, "%s",'this is saved text'); 
+2

可能要編輯以在if語句中包含'continue;'以及導致打開文件失敗將導致一些有趣的問題,因爲它代表。 –

+0

@LukePark並且還改變' fclose'到'fsync'。 –

+0

'else'子句比'continue'想法好得多。如果你刪除了'continue',那麼如果'fopen'fails失敗,程序將不會運行。 –