简体   繁体   English

在C语言中阅读科学记数法

[英]Reading Scientific Notation in C

I am trying to read a file that has the following contents: 我正在尝试读取具有以下内容的文件:

1.0000000e+01 2.9265380e+03 5.0821200e+02 4.3231640e+01 1.0000000e + 01 2.9265380e + 03 5.0821200e + 02 4.3231640e + 01

2.0000000e+01 1.0170240e+04 9.2798610e+02 4.0723180e+01 2.0000000e + 01 1.0170240e + 04 9.2798610e + 02 4.0723180e + 01

3.0000000e+01 2.1486260e+04 1.1832420e+03 1.0328000e+01 3.0000000e + 01 2.1486260e + 04 1.1832420e + 03 1.0328000e + 01

4.0000000e+01 3.3835080e+04 1.1882285e+03 -9.3307000e+00 4.0000000e + 01 3.3835080e + 04 1.1882285e + 03 -9.3307000e + 00

5.0000000e+01 4.5250830e+04 1.0899705e+03 -1.0320900e+01 5.0000000e + 01 4.5250830e + 04 1.0899705e + 03 -1.0320900e + 01

6.0000000e+01 5.5634490e+04 9.8935650e+02 -9.8019000e+00 6.0000000e + 01 5.5634490e + 04 9.8935650e + 02 -9.8019000e + 00

7.0000000e+01 6.5037960e+04 8.9134700e+02 -9.8000000e+00 7.0000000e + 01 6.5037960e + 04 8.9134700e + 02 -9.8000000e + 00

but I can't seem to find a proper way to read the scientific notation. 但我似乎无法找到一种阅读科学记谱法的正确方法。 Here is what I have of the code: 这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // This is the array to store the input
    double time[24], altitude[24], velocity[24], acceleration[24];
    double var1, var2, var3, var4;

    //This is the pointer declaration for opening a file
    FILE * fp = fopen("rocket.txt", "r");

    int i = 0;

    while(fscanf(fp,"%g %f %f %f", &var1, &var2, &var3, &var4) > 0){
        time[i] = var1;
        altitude[i] = var2;
        velocity[i] = var3;
        acceleration[i] = var4;
        printf("Time: %f \n", &time[i]);
        i++;
    }

    printf("Time: %f", &time[0]);

   fclose(fp);

   return(0);
}

I've tried multiple combinations of %f, %g, %d to try and print out the result but I can never get the right thing. 我已经尝试了%f, %g, %d多种组合来尝试打印出结果,但我永远无法得到正确的结果。

If anyone can point me on the right direction I will greatly appreciate it. 如果有人能指出我正确的方向,我将非常感激。

What you want to use is %lf for input and %e for output in scientific notation: 您想要使用的是输入的%lf和科学计数法输出的%e

scanf("%lf", &input);
printf("%e\n", input); 

You could use a, e, f, or g in the conversion specifier like this: 您可以在转换说明符中使用a,e,f或g,如下所示:

fscanf(fp, "%a", &input); // NOTE: only with C99 compilers
fscanf(fp, "%e", &input);
fscanf(fp, "%f", &input);
fscanf(fp, "%g", &input);

They will all work for parsing floats, but for doubles you will need to use the length modifier "l" like this: 它们都可用于解析浮点数,但对于双精度数,你需要使用长度修饰符“l”,如下所示:

fscanf(fp, "%le", &input);

To print the values, you can use any of the specifiers but you don't need the length modifier "l": 要打印值,可以使用任何说明符,但不需要长度修饰符“l”:

printf("%e ", input);  // or f or g  (or a C99 compilers only)
printf("%le ", input); // produces the same thing

A really helpful reference is here: http://en.cppreference.com/w/c/io/fscanf 这里有一个非常有用的参考: http//en.cppreference.com/w/c/io/fscanf

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM