我有一个 txt 文件,其中包含以下数据:
5
676.54
6453.22
7576.776
8732.2
6
我需要在 C 程序中逐行读取文件。但是无论我用什么方法来读取文件,我都会得到一个字符串的值。我需要将值获取为 int 和 float 类型(取决于值)。有什么办法可以做到这一点吗?运行平台为linux。
使用 fscanf()
FILE* f = fopen(name, mode);
float d;
fscanf(f, "%f\n", &d);
但这总是会给你浮点数(使用 %lf 作为双打)。
如果您想知道格式是什么,将一行读取为字符串,然后使用 strtod() 尝试先将其读取为 int 并查看使用了多少字符串(如果全部,它是 int)和 strtod()读为双重。
如果您想阅读浮点数,请使用fscanf
百分比%f
代码
float var;
while (fscanf(yourfilepointer, "%f", &var) == 1)
{
// do your stuff with your float var
}
#include <stdio.h>
#include <stdlib.h>
typedef union _num {
long int integer;
double floating;
} NumberU;
typedef struct _n {
char type;
NumberU data;
} Number;
int main() {
FILE *fp;
int c,i;
char buff[16];
Number num[10];
fp=fopen("data.txt","r");
for(c=0;c<10 && NULL!=fgets(buff,sizeof(buff),fp);){
char *ck;
long di;
double dd;
di=strtol(buff, &ck, 0);
if(*ck == '\n'|| *ck == '\0'){
num[c].type = 'i';
num[c++].data.integer = di;
continue;
}
dd=strtod(buff, &ck);
if(*ck == '\n'|| *ck == '\0'){
num[c].type = 'f';
num[c++].data.floating = dd;
continue;
}
fprintf(stderr, "error input:%s\n", buff);
}
fclose(fp);
for(i=0;i<c;++i){
if(num[i].type=='i')
printf("%ld\n", num[i].data.integer);
else if(num[i].type=='f')
printf("%lf\n", num[i].data.floating);
}
return 0;
}
逐行读取文件作为浮点数X
如果 X == ((int) X)
那么它是一个int
否则它是一个float
float X;
int a;
while(fscanf(file, "%lf", X)>0) {
if(X == ((int) X)) {
a = ((int) X);
printf("scanned value is integer: %d\n", a);
} else {
printf("scanned value is float: %lf\n", X);
}
}