繁体   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