我有一个文件,我必须从中读取一些数字并将它们放入数组中。唯一的问题是我不知道如何找到它的大小。我得到了阵列的最大尺寸,但数字并没有完全填满阵列。我尝试了许多不同的方法使其工作,但它没有从文件中读取正确的值。有没有其他方法可以做到没有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;
}
答案 0 :(得分:2)
如果每次成功执行<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#404040"
android:endColor="#F1F1F1"
android:angle="270"
>
</gradient>
</shape>
时增加i
,则会将其作为所读取项目数的计数。
fscanf
编辑:正如@chux指出的那样,在这种情况下,最好在每次通话时与1(预期扫描的项目数)进行比较。如果提供了虚假输入(非数字),那么仍然存在问题,您应该停止。
答案 1 :(得分:1)
定义最大大小数组并继续循环。
文件输入不需要填充数组,只需填充它即可。跟踪i
使用了test[]
的数量,并确保不要过度填充数组。
#define MAX_NUMBER 25
int test[MAX_NUMBER];
FILE* sp_input = fopen("a20.dat", "r");
...
// Use `size_t` for array indexing
size_t i;
// do not read too many `int`
for (i=0; i<MAX_NUMBER; i++) {
if (fscanf(sp_input, "%d", &test[i]) != 1) {
break;
}
printf("test[%zu]=%d\n", i, test[i]);
}