C - 读取直到 EOF,获取附加地址和数字(数组)

标签 c arrays file limit

所以,我有一个充满数字的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

情况是,我不知道此文件中数字的确切数量,因此我不知道需要将此文件信息写入此数组的数组的确切大小。

我刚刚给了数组比我需要的大得多的大小,我将向您展示输出,部分它完成了它的工作。

这是代码:

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

#define ARR_SIZE 30

int main(void){
FILE *fp;
int array[ARR_SIZE];
fp = fopen("C:/project/project.txt", "r");

printf("Numbers: ");

for(int i = 0; i < ARR_SIZE; i++){
    fscanf(fp, "%d", &array[i]);
}
for(int j = 0; j < ARR_SIZE; j++){
    printf("\n%d", array[j]);
}

fclose(fp);
return 0;
}

我只是想做标准的事情,打开文件,用for循环读取文件,将所有这些信息写入数组并输出数组。

这是我得到的输出,我知道这是因为大小,但是你能告诉我如何限制所有这些吗?最简单的方法?

输出:

Numbers:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4199136
0
4200896
6422240
6422296
6422476
1998244384
592257989
-2
1998220218
1998220461
4200896
6422368
4200987
4200896

我的数组大小为 30,文件中的数字为 15,前 15 个没问题,这正是我所需要的,但我不需要后面的那些数字...

最佳答案

从文件读取的循环需要一个停止条件。一种选择是在无法扫描项目时停止。使用 fscanf 的返回值来检测。

当您进行打印时,仅打印实际扫描的项目数。

尝试

for(int i = 0; i < ARR_SIZE; i++){
    if (fscanf(fp, "%d", &array[i]) != 1) break; // Stop if the scan fails
}
for(int j = 0; j < i; j++){  // ARR_SIZE replaced by i
    printf("\n%d", array[j]);  
}

顺便说一句:您应该在文件打开后立即检查 fp 是否有效。

关于C - 读取直到 EOF,获取附加地址和数字(数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572421/

相关文章:

javascript - 从 Electron 中的另一个目录加载 HTML

c - 在c中返回多维指针

python - 获取数组范围的开始和结束

c++ - "argv[0] = name-of-executable"是公认的标准还是只是一个常见的约定?

arrays - 使用 awk 在 bash 中使用另一个有序数组模式对多行数组进行排序

javascript - 按 id 筛选数组 angularjs 的数组

AngularJS 函数未通过 ngf-select 触发

python - 将文件解析为python中的字典

c - C程序中的浮点异常

c - 问题访问 C 中字符指针数组的内容