簡體   English   中英

C程序未寫入文本文件

[英]C program not writing to text file

所以這是問題所在:

我想在文本文件中寫一些文本,但是遇到了一些奇怪的情況:

范例1:

int main()
{
    FILE *file = fopen("structures.txt", "a+"); // open the file for reading & writing
    int choice = 0;

    if(file == NULL)
        puts("Unable to open text file");
    else { 
        do {
            scanf("%d", &choice);
            fprintf(file, "This is testing for fprintf...\n");
        }while(choice > 0);
    }
    fclose(file);

    return 0;
}

在此版本的程序中,沒有任何內容寫入文本文件,我也不明白為什么。 但是對我來說最奇怪的是:

范例2:

int main()
{
    FILE *file = fopen("structures.txt", "a+"); // open the file for reading & writing
    int choice = 0;

    if(file == NULL)
        puts("Unable to open text file");
    else { 
        do {
            scanf("%d", &choice);
            fprintf(file, "This is testing for fprintf...\n");
            fclose(file); // Added this line, the writing works
        }while(choice > 0);
    }
    fclose(file);

    return 0;
}

添加fclose(file); 直接在fprintf調用之后,程序成功寫入:

這是測試fprintf ...

到文本文件。

我的問題是:

  • 這是否意味着每當我想向其中寫入文本並隨后直接將其關閉時,都必須打開文本文件?

  • fclose()編寫過程有關系嗎?

  • 是什么因素導致fprintf()無法正常工作? (第一個樣本)

  • 在程序開始時和結束時,如何才能一次打開和關閉文本文件(分別),以確保我的程序可以正常運行?

這是否意味着每當我想向其中寫入文本並隨后直接將其關閉時,都必須打開文本文件?

不,但是這可能意味着您需要先關閉文件,然后才能將寫入的內容實際清空並寫出到文件中。

fclose()與編寫過程有關系嗎?

大多數文件流都被緩沖。 意思是每次寫到內存。 在緩沖區已滿或調用close之前,它不會寫入磁盤。

是什么因素導致fprintf()無法正常工作? (第一個樣本)

您發現任何嚴重錯誤。

在程序開始時和結束時,如何才能一次打開和關閉文本文件(分別),以確保我的程序可以正常運行?

您可以調用fflush()類的東西。 但是,您確定嘗試過此方法,即使最后最后關閉了文件,文件也沒有任何內容嗎?

我使用int fflush (FILE *stream) (@Jonathan暗示了)解決了這個問題。

在緩沖流上刷新輸出意味着將所有累積的字符傳輸到文件。 在許多情況下,流中的緩沖輸出會自動刷新:

當您嘗試執行輸出並且輸出緩沖區已滿時。

流關閉時。

當程序通過調用exit終止時。

寫入換行符時,如果流是行緩沖的。

每當任何流上的輸入操作實際從其文件中讀取數據時。

所以基本上,我只需要在調用fprintf()之后再調用fflush() fprintf()

fprintf(file, "This is testing for fprintf...\n");
fflush(file);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM