我有一个名为 counts.txt 的文件。
此文件包含一个值:数字 1 。
我希望我的程序从文件中读取一个整数并递增它,但是当我运行程序时,它正在读取 -28711 而不是 1 。
以下是代码:
#include<stdio.h>
#include<conio.h>
void main(void)
{
FILE *fptr;
int count;
fptr = fopen("counts.txt","w+");
fscanf(fptr,"%d",&count);
count++;
fprintf(fptr,"%d",count);
fclose(fptr);
}
答案 0 :(得分:1)
你想使用&#34; r +&#34; (读写)而不是&#34; w +&#34; (截断 - 读写),如您的问题评论中所述。
阅读完之后,您希望fseek
在文字开头写作之前,否则您只需要附加数字。
答案 1 :(得分:1)
您需要以r+
模式打开文件,因为w+
清空文件并使用fseek()将光标移到开头,然后写入文件,
#include<stdio.h>
#include<conio.h>
void main(void)
{
FILE *fptr;
int count;
fptr = fopen("counts.txt","r+");
fscanf(fptr,"%d",&count);
count++;
fseek(fptr,0,SEEK_SET);
fprintf(fptr,"%d",count);
fclose(fptr);
}
答案 2 :(得分:1)
正如其他提到的,将fopen()
模式更改为"r+"
并添加fseek()
添加了其他改进,包括@Bgie检查scanf()
#include<stdio.h>
#include<conio.h>
void main(void) {
FILE *fptr;
int count;
fptr = fopen("counts.txt","r+");
// Check fopen results
if (fptr != NULL) {
// Check scanf results
if (fscanf(fptr,"%d",&count) != 1) count = 0;
count++;
fseek(fptr, 0, SEEK_SET);
// Add \n to demarcate the end of the number
fprintf(fptr,"%d\n",count);
fclose(fptr);
}
return 0;
}
如果没有它,"\n"
会有帮助,如果数字是“-100”,那么“-99”会覆盖“-10”而你会得到“-990”。
答案 3 :(得分:0)
尝试更改&#34; w +&#34; (以读取权限书写)到&#34; r +&#34; (阅读写作选项)因为我认为w +会破坏文件的内容。
或尝试添加一个fseek将光标放在文件的开头...
答案 4 :(得分:0)
这有效:
void main(void)
{
FILE *fptr;
int count;
fptr = fopen("counts.txt","r+");
fscanf(fptr,"%d",&count);
count++;
fseek(fptr, 0, SEEK_SET) ; // needed to set the file pointer back to the
// begining of the file
fprintf(fptr,"%d",count);
fclose(fptr);
}
但count.txt
文件必须存在。