我有具有以下数据txt文件:需要转换值应取为INT /浮子从文件在C
5
676.54
6453.22
7576.776
8732.2
6
我需要读取在由线C程序行的文件。但是无论用什么方法来读取文件,我都会将该值作为字符串来获取。我需要得到的值为int和float类型(取决于值)。有什么办法可以做到这一点?操作平台是linux。
我有具有以下数据txt文件:需要转换值应取为INT /浮子从文件在C
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()以双精度读取。
“如果没有size修饰符,应用程序应确保相应的参数是指向** float **的指针。” - http://pubs.opengroup.org/onlinepubs/009695399/functions/fscanf.html – Sebivor 2013-04-10 14:58:13
'“%f”'是“double”的正确格式(或至少是“a”)。没有'float'的格式,因为如果你试图将一个'float'传递给'printf',它会在'printf'接收它之前被提升为'double' http://stackoverflow.com/questions/ 4264127 /正确的格式说明符换双合的printf/4264154#4264154 – MOHAMED 2013-04-10 15:39:26
逐行读取文件线作为浮动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);
}
}
如果你想读浮点数使用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;
}
你尝试过什么样的方法? – teppic 2013-04-10 14:46:26
如果你没有告诉我们你在做什么不起作用,没有办法解决问题没有办法解决问题。 – 2013-04-10 14:49:41
我尝试过使用fgetc和fgets。以下答案解决了这个问题。 – 2013-04-10 15:12:01