c - 写入和读取文件

标签 c file fopen fgets

我编写了以下代码段以将 n 个随机数写入文件。写入后,我从文件中读取并将数字存储在数组中。我面临的问题是,当我从文件中读取时,我得到了额外的数字。

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int limit,i=0;
    int numbers[100];
    char line[100];
    printf("Enter the number of random number to be generated(max 1000)");
    scanf("%d",&limit);
    FILE *fpi;
    fpi=fopen("input.txt","w");
    for(i=0;i<limit;i++)
    {
        fprintf(fpi,"%d\n",rand());
    }
    fclose(fpi);
    FILE *file;
    file = fopen("input.txt", "r");
    while(fgets(line, sizeof line, file)!=NULL)
    {
        numbers[i]=atoi(line);
        i++;
    }
    printf("%d\n\n",i);
    int totalNums = i;
    for (i=0 ; i<totalNums ; i++)
    {
        printf("%d\n",numbers[i]);
    }
    fclose(file);
    return 0;
}

如果我给 limit=3 并向文件写入 3 个数字,例如 47,18836,431。 当我从文件中读取并打印它时,我得到 6 个值,其中前 3 个是垃圾值,接下来的 3 个是已写入的值。

如果我注释掉写入部分并尝试从文件中读取,我只会得到 3 个数字的正确输出。所以我认为我的代码写入文件部分存在一些问题。 谁能帮我解决这个问题。

最佳答案

在读取文件之前将i 重置为0。例如

//your code before
i=0; //reset i
while(fgets(line, sizeof line, file)!=NULL) 
{      
    numbers[i]=atoi(line); 
    i++;
}
//your code after

关于c - 写入和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923847/

相关文章:

c - 用 C fopen 保存文件

c - fopen() 挂起。有时

c - 输出不会在某个值之后出现

java - 文件未找到异常。如何构造文件路径?

c - fopen() 中 r+ 和 w+ 的区别

c++ - 为什么在fopen中使用 'r+'模式时文件必须存在?

c++ - 进入函数,但不进入 VS2017 的参数评估

c - 在结构中初始化一个 const 数组

Java,将文件复制到jre

c# - 创建后无法立即写入文件