在C语言中阅读科学记数法
我正在尝试读取具有以下内容的文件:
1.0000000e + 01 2.9265380e + 03 5.0821200e + 02 4.3231640e + 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
4.0000000e + 01 3.3835080e + 04 1.1882285e + 03 -9.3307000e + 00
5.0000000e + 01 4.5250830e + 04 1.0899705e + 03 -1.0320900e + 01
6.0000000e + 01 5.5634490e + 04 9.8935650e + 02 -9.8019000e + 00
7.0000000e + 01 6.5037960e + 04 8.9134700e + 02 -9.8000000e + 00
但我似乎无法找到一种阅读科学记谱法的正确方法。 这是我的代码:
#include #include 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); }
我已经尝试了%f, %g, %d
多种组合来尝试打印出结果,但我永远无法得到正确的结果。
如果有人能指出我正确的方向,我将非常感激。
您想要使用的是输入的%lf
和科学计数法的输出的%e
:
scanf("%lf", &input); printf("%e\n", input);
您可以在转换说明符中使用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);
它们都可以用于解析浮点数,但对于双精度数,你需要使用长度修饰符“l”,如下所示:
fscanf(fp, "%le", &input);
要打印值,可以使用任何说明符,但不需要长度修饰符“l”:
printf("%e ", input); // or f or g (or a C99 compilers only) printf("%le ", input); // produces the same thing
这里有一个非常有用的参考: http : //en.cppreference.com/w/c/io/fscanf