2016-04-30 3 views
2

Ich habe eine Funktion, die die angegebenen Argumente hinzufügt und das Ergebnis ausgibt.So ändern Sie Datentypen in c

Mit ganzen Zahlen gab es überhaupt keine Probleme. Benutze atoi, um String-Argument zu ändern -> int.
z.B. : ./main 3 4 5 wird gedruckt 12.

Aber wenn ich ./main 4.5 6 5.5 habe? Wie mache ich so etwas in C? Wie kann die Funktion "sehen", dass es die Argumenttypen jetzt ändern muss?

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

int main(int argc, char* argv[]) 
{ 
    int i , sum = 0; 
    for(i=1; i < (argc); ++i) 
    sum += atol(argv[i]); 
    printf("%d\n", sum); 

    return 0; 

} 

Antwort

4

In gibt es keine Funktion wie in Überlastung, so sollten Sie atof verwenden, wie folgt aus:

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i = 1; i < (argc); ++i) 
    sum += atof(argv[i]); 
    printf("%f\n", sum); 

    return 0; 

} 

Zahlen als reelle Zahlen zu behandeln, nicht ganze Zahlen.

Ausgang:

[email protected]:~$ ./a.out 4.5 6 5.5 
16.000000 

da jetzt 6 ist wie 6.0 behandelt.


Vielleicht möchten, dies auch lesen: How to convert string to float?

+0

einfach gut ^^. Ich habe vergessen, das falsche Eingabeproblem hinzuzufügen. zB .: ./main 4 4 n 5 Es sollte einen Hinweis geben, dass etwas nicht stimmt. Anstatt nur das n aus der Gleichung zu lassen. – letter

+0

@letter Sie sollten die Antwort akzeptieren, da es Ihre Frage beantwortet. :) Für das, was du vergessen hast, benutze 'isdigit()' (oder lies das: http://stackoverflow.com/questions/16644906/how-to-check-if-a-string-is-a-number). Wenn Sie immer noch Probleme haben, posten Sie eine neue Frage und teilen Sie den Link bitte mit mir. :) – gsamaras

0

Sie sollten double verwenden Gleitkommazahlen zu speichern, atof Strings zu analysieren und die %fprintf Spezifizierer.

+0

AFAIK, '% lf' ist der Formatbezeichner für den doppelten Datentyp ... – user3078414

+0

@ user3078414 [es gibt keinen Unterschied für die printf-Funktionsfamilie] (http://stackoverflow.com/questions/25860850/what-is- die Differenz zwischen-f-und-lf-in-c). – Roman

2

Ich habe den folgenden Code getestet. Es wird die Fließkommazahl bis zu 2 Dezimalstellen ausgeben.

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i=1; i<argc; i++) 
     sum += atof(argv[i]); 
    printf("%.2f\n", sum); 

    return 0; 
} 
0

Obwohl ich eine implizite Erklärung Warnung für strtod bekommen (weil das Linux-Handbuch mir nicht sagen, die richtigen enthält verwenden), dieser Code unten funktioniert:

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum=0; 
    for(i=1; i < argc; ++i) 
sum += strtod(argv[i],NULL); 
    printf("%f\n", sum); 

    return 0; 

} 

Das Handbuch auch besagt, das folgende als ein Problem mit der Verwendung atoi():

The atoi() function converts the initial portion of the string pointed to by nptr to int. 
The behavior is the same as 

strtol(nptr, (char **) NULL, 10); 

except that atoi() does not detect errors.