【发布时间】:2017-04-14 04:05:42
【问题描述】:
我有一个文件,我必须从中读取一些数字并将它们放入一个数组中。唯一的问题是我不知道如何找到它的大小。我得到了数组的最大大小,但数字并没有完全填满数组。我尝试了许多不同的方法来使其工作,但它没有从文件中读取正确的值。没有sizeof还有其他方法吗?
#include<stdio.h>
#define MAX_NUMBER 25
int main(void)
{
int test[];
int size;
FILE* sp_input;
int i;
sp_input = fopen("a20.dat", "r");
if (sp_input == NULL)
printf("\nUnable to open the file a20.dat\n");
else
{
while( fscanf(sp_input, "%d", &test[i])!=EOF)
{
size=sizeof(test)/sizeof(test[0]);
}
for(i = 0; i < size; i++)
printf("\na[%d]=%d has a size of %d\n", i,test[i],size);
fclose(sp_input);
}
return 0;
}
【问题讨论】:
-
i未初始化,并且永远不会更改您的 while 循环中的值。 -
如果
size应该是数组中有多少个数字,为什么不直接从 0 开始,并为读取的每个数字递增? -
另外,您需要提供
test的元素数量,例如。int test[MAX_NUMBER];-- 数组总是有最大数量的元素,但是您可以使用size跟踪您实际使用的元素数量。 -
这一行:
int test[];无法编译!建议:`int test[ MAX_NUMBER ]; -
这一行:
while( fscanf(sp_input, "%d", &test[i])!=EOF)正在使用变量i而没有初始化它,因此它包含了堆栈上i位置处内存中的垃圾。并且i没有递增以遍历数组test[]建议:i = 0; while( i<MAX_NUMBER && 1 == fscanf(sp_input, "%d", &test[i]) ) i++;