2014-06-21 14 views
5

Ich versuche, eine Datei zu lesen, die die folgenden Inhalte haben:Lese wissenschaftliche Notation in C

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

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

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

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

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

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

7.0000000e + 01 6,5037960 e + 04 8.9134700e + 02 -9.8000000e + 00

aber ich kann nicht scheinen, einen richtigen Weg zu finden, die wissenschaftliche Notation zu lesen. Hier ist, was ich von dem Code haben:

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

ich mehrere Kombinationen von %f, %g, %d versucht haben, um zu versuchen, aus dem Ergebnis zu drucken, aber ich kann nie das Richtige bekommen.

Wenn mir jemand auf die richtige Richtung zeigen kann, werde ich es sehr schätzen.

+0

Do not Verwenden Sie 'fscanf()' zum Analysieren von Strings. –

Antwort

13

Was möchten Sie verwenden ist %lf für Ein- und %e für die Ausgabe in der wissenschaftlichen Schreibweise:

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

das hat perfekt funktioniert. Vielen Dank! –

0

Sie könnten ein verwenden, e, f oder g im Konvertierungsspezifizierer wie folgt aus:

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

Sie werden alle Arbeiten für Schwimmer Parsen, aber für die Doppel müssen Sie die Längenmodifizierer „l“ wie folgt verwenden:

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

die Werte zu drucken, Sie eines der Spezifizierer verwenden, aber Sie nicht die Längenmodifizierer „l“ brauchen:

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

Eine wirklich hilfreiche Referenz ist hier: http://en.cppreference.com/w/c/io/fscanf

Verwandte Themen