2013-04-10 54 views
-1

我有具有以下数据txt文件:需要转换值应取为INT /浮子从文件在C

5 
676.54 
6453.22 
7576.776 
8732.2 
6 

我需要读取在由线C程序行的文件。但是无论用什么方法来读取文件,我都会将该值作为字符串来获取。我需要得到的值为int和float类型(取决于值)。有什么办法可以做到这一点?操作平台是linux。

+0

你尝试过什么样的方法? – teppic 2013-04-10 14:46:26

+0

如果你没有告诉我们你在做什么不起作用,没有办法解决问题没有办法解决问题。 – 2013-04-10 14:49:41

+0

我尝试过使用fgetc和fgets。以下答案解决了这个问题。 – 2013-04-10 15:12:01

回答

2

使用fscanf()

FILE* f = fopen(name, mode); 
float d; 
fscanf(f, "%f\n", &d); 

但是,这总是会给你浮动(使用%lf为双打)。

如果你想知道格式是以字符串的形式读取一行,然后使用strtod()尝试先读取它作为一个int,并看看有多少字符串被使用(如果全部,它是一个int)和strtod()以双精度读取。

+0

“如果没有size修饰符,应用程序应确保相应的参数是指向** float **的指针。” - http://pubs.opengroup.org/onlinepubs/009695399/functions/fscanf.html – Sebivor 2013-04-10 14:58:13

+0

'“%f”'是“double”的正确格式(或至少是“a”)。没有'float'的格式,因为如果你试图将一个'float'传递给'printf',它会在'printf'接收它之前被提升为'double' http://stackoverflow.com/questions/ 4264127 /正确的格式说明符换双合的printf/4264154#4264154 – MOHAMED 2013-04-10 15:39:26

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); 

    } 

} 
1

如果你想读浮点数使用fscanf%f%的代码

float var; 

while (fscanf(yourfilepointer, "%f", &var) == 1) 
{ 
    // do your stuff with your float var 
} 
0
#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; 
}