-1

我有一个 txt 文件,其中包含以下数据:

5
676.54
6453.22
7576.776
8732.2
6

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

4

4 回答 4

2

使用 fscanf()

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

但这总是会给你浮点数(使用 %lf 作为双打)。

如果您想知道格式是什么,将一行读取为字符串,然后使用 strtod() 尝试先将其读取为 int 并查看使用了多少字符串(如果全部,它是 int)和 strtod()读为双重。

于 2013-04-10T14:50:32.433 回答
1

如果您想阅读浮点数,请使用fscanf百分比%f代码

float var;

while (fscanf(yourfilepointer, "%f", &var) == 1)
{
    // do your stuff with your float var
}
于 2013-04-10T14:52:18.003 回答
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;
}
于 2013-04-10T15:23:04.927 回答
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);

   }

}
于 2013-04-10T14:50:15.823 回答