首页 > 解决方案 > 我正在尝试编写一个 C 程序来将文件中的整数存储到数组中,但它不起作用。有人能帮我吗?

问题描述

好像我不太明白文件流是如何工作的。我的文本文件现在包含以下整数:1 10 5 4 2 3 -6,但我希望程序能够从文件中读取任意数量的整数,如果它改变的话。

显然我什至没有使用正确的功能。我写的代码如下:

 int main() {
     printf("This program stores numbers from numeri.txt into an array.\n\n");
     int a[100];
     int num;
     int count = 0;

     FILE* numeri = fopen("numeri.txt", "r");

     while (!feof(numeri)) {
         num = getw(numeri);
         a[count] = num;
         if (fgetc(numeri) != ' ')
             count++;
     }

     int i;
     for (i = 0; i < count; i++) { printf("%d ", a[i]); }

     return 0;
}

我希望它用存储的数字打印出数组,但我得到的是:540287029 757084960 -1

有人可以帮助我理解我做错了什么,也许可以告诉我如何正确编写这种代码?

标签: carraysfile

解决方案


我已经根据评论修复了您的代码。我曾经从文件中读取并通过检查和检查是否恰好填充了一个参数fscanf来限制可以存储在数组中的数字数量。count < 100fscanf

另外,为了安全起见,我检查了文件是否可以打开。如果无法打开,则只需打印错误消息和return 1.

int main() {

    printf("This program stores numbers from numeri.txt into an array.\n\n");
    int a[100] = {0};
    int num;
    int count = 0;
    int i = 0;

    FILE* numeri = fopen("numeri.txt", "r");
    if (numeri == NULL) {
        printf("Can't open file\n");
        return 1;
    }

    while (count < 100 && fscanf(numeri, "%d", &num) == 1) {
       a[count++] = num;
    }

    for (i = 0; i < count; i++) { printf("%d ", a[i]); }

    return 0;
}

推荐阅读