当从文本文件中读取一个小的正整数并递增它时,接收一个大的负数

时间:2014-04-15 13:57:23

标签: c file-io

我有一个名为 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);
}

5 个答案:

答案 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文件必须存在。