在c中读写文件

时间:2015-03-17 23:34:41

标签: c

我想知道为什么我的程序无法将我的.txt文件的数字输入到我的数组中。它读取它们但我无法将它们输入到数组中供以后使用。 任何人都可以帮助我更好地理解c中读写文件的管理,请我在这个主题上有新的知识,我知道我应该使用int而不是chars,因为我的.txt文件只包含数字。但是我认为只有fgets等功能才能用于字符。

#include <stdio.h>

    int main()
    {
        FILE* file;
        char name[10] = "100.txt";
        char line[10];
        int n;
        char i[5];
        file = fopen(name, "rt");

        if (file == NULL)
        {
            printf("There is no such file!\n");
            return 0;
        }
        for (n=0; n < 100; n++){
        fgets(line, 5, file);
        //puts(line);
        i[n]=line;
        puts(i[n]);
        }
        fclose(file);

        return 0;
    }

1 个答案:

答案 0 :(得分:1)

如果你切换到fscanf你可以使用int而不是char,并且鉴于你正在解析包含数字的文本文件,它更有意义。假设您的100.txt有一个由空格分隔的100个数字,这应该有效:

int main(int argc, char* argv[])
{
    FILE* file;
    char name[10] = "100.txt";
    char line[10];
    int n;
    int numberArray[100];
    file = fopen(name, "rt");

    if (file == NULL)
    {
        printf("There is no such file!\n");
        return 0;
    }

    for (n=0; n < 100; n++){
        fscanf(file, "%d", &numberArray[n]);
    }
    fclose(file);

    return 0;
}

以下是fscanf解释的链接。

编辑:

使用fscanf还有另一种更优雅的解决方案:

while (fscanf(file,"%d",&numberArray[n++]) == 1);
以这种方式,只要有数字(即直到EOF),你就会遍历文本文件。如果文本文件中的数字计数大于为数组分配的空间,则程序可能会崩溃时要小心。

写回文件:

FILE* fp = fopen( "out_file.txt", "w" ); // Open file for writing
int arrNumSize = sizeof(numberArray) / sizeof(int);
for (int i = 0; i < arrNumSize; i++)
{ 
    fprintf(fp, "%d", numberArray[i] );
}

fclose(fp);