让我们考虑一个小于10个数字的文件,可以是int或float。我想阅读它们并将它们添加到数组中。
我面临的问题是,如果我只有一些整数,那么我可以做得很好,但是当它到达一个浮点数时它就会混乱
在file.data中
11
22
33.3
44
55
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void usage(char * message) ;
int main(int argc, char * argv[]){
//opening the file
FILE * flux = fopen("file.data", "r");
if (!flux) usage("error opening the file");
int array[10]; //array to host the data
int i=0;
int lu;
while ((lu = fscanf(flux, "%i", &array[i])) !=EOF && i<10){
printf("lu %i\n", lu );
printf("array[%i] %i\n", i, array[i] );
printf("\n");
i++;
}
return 0 ; }
void usage(char * message) { fprintf(stderr, "%s\n", message) ; exit(1) ;}
输出:
lu 1
array[0] 11
lu 1
array[1] 22
lu 1
array[2] 33
lu 0
array[3] 0
lu 0
array[4] 4196464
lu 0
array[5] 0
lu 0
array[6] 4195936
lu 0
array[7] 0
lu 0
array[8] 904651696
lu 0
array[9] 32766
我如何使用fscanf,以便在它到达浮点时不会陷入困境?
(我可以说,声明一个int数组并尝试输入一些浮点数似乎没有问题......任何方式都可以吗?)
修改 我的目标是能够读取我的数组并使用其索引打印其内容,例如使用我的数据:
0. 11
1. 22
2. 33.3
3. 44
4. 55
答案 0 :(得分:1)
你只需要整数吗?如果是这样,您可以在将它们放入数组之前读取float并将它们转换为整数:
float tmp;
while ((lu = fscanf(flux, "%f", &tmp)) !=EOF && i<10){
array[i] = (int)tmp; //you could use some rounding here
printf("lu %i\n", lu );
printf("array[%i] %i\n", i, array[i] );
printf("\n");
i++;
}