gpt4 book ai didi

c - 为什么 fseek 和 fputc 在我的程序中不起作用?

转载 作者:行者123 更新时间:2023-11-30 18:50:43 26 4
gpt4 key购买 nike

我正在学习用 C 语言编程。请解释为什么我的程序不起作用。怎么了?该程序创建一个文件,将一个数字写入该文件,并在每次运行该程序时增加该数字。该程序会计算我打开该文件的次数。

#include <stdio.h>

int main (void)
{
int n;
int c;
FILE* f = fopen("count_pr.bin", "a+");
if ((c=fgetc(f)) == EOF)
{
n=1;
fputc(n, f);
}
else
{
++n;
fseek(f, 0, SEEK_SET);
fputc(n, f);
}
printf ("The program was opened: %d\n", n);
fclose(f);
}

最佳答案

在“a+”模式下,来自 here

append/update: Open a file for update (both for input and output) with all output operations writing data at the end of the file. Repositioning operations (fseek, fsetpos, rewind) affects the next input operations, but output operations move the position back to the end of file. The file is created if it does not exist.

输出操作将位置移回文件末尾。因此,您所做的每次写入都将位于文件末尾。

此外,您需要按照Klas的建议进行更改如果你想每次都覆盖数字,你应该使用r+模式

read/update: Open a file for update (both for input and output). The file must exist.

仍然存在如果文件不存在则创建该文件的问题,所以在这种情况下,如果该文件无法以 r+ 模式打开,那么您可以以“w”或“w+”模式打开它,并且只写入到它。

我已经更新了下面的代码。

#include <stdio.h>
int main (void)
{
int n;
int c;
FILE* f = fopen("count_pr.bin", "r+");
if (f == NULL)
{
f = fopen("count_pr.bin", "w");
if (f != NULL)
{
n = 1;
fputc(n, f);
}
else
{
printf (" File Open Error");
exit(1);
}
}
else
{
c=fgetc(f);
n = c+1;
fseek(f, 0, SEEK_SET);
fputc(n, f);
}
printf ("The program was opened: %d\n", n);
fclose(f);
}

关于c - 为什么 fseek 和 fputc 在我的程序中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39388372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com