Integer parsen in C?
Wie parse ich ein Integer in C? Sodass ich nur
./a.out 5
eingeben muss und dann die 5 "verarbeitet" werden kann?
Habe es so probiert:
#include <stdio.h>
int foo(int n)
{
return n*(n+1)/2;
}
int main(int argc, char* argv[])
{
int sum = foo(argv[1]);
printf("%d\n", sum);
return 0;
}
jedoch funktioniert es nicht, beim gcc compiler kommt das:
warning: passing argument 1 makes integer from pointer without a cast [-Wint-conversion] int sum = foo(argv[1]);
note: expected ‘int’ but argument is of type ‘char *’ int foo(int n)
Es wird zwar kompiliert, aber bei jeder durchführung mit den selben Variablen kommt immer was anderes raus.
$ foo 10
-737864039
$ foo 10
-118866279
$ foo 10
79058585
Dann habe ich es ein bisschen umgeschrieben und die Variable mit scanf eingelesen und da hat es funkioniert, sonst aber nicht. Was muss ich denn ändern?
4 Antworten
Das Argument muss in einen Integer umgewandelt werden:
#include <stdio.h>
#include <stdlib.h>
int foo(int n)
{
return n * (n+1) / 2;
}
int main(int argc, char* argv[])
{
int sum = foo(atoi(argv[1]));
printf("%d\n", sum);
return 0;
}
Hierzu kann die Funktion atoi (ascii to int) verwendet werden:
The C library function int atoi(const char *str) converts the string argument str to an integer (type int).
Weitere Informationen findest du unter: https://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm
Es gibt in C noch weitere Möglichkeiten, z. B. die Funktion strtol().
Da steht doch, was fehlt: du musst die Eingabe als int casten, da es anders (als char) aufgenommen wird. C ist sehr streng bei Typen 😅
Entweder Du nimmst atoi oder strtol (falls Fehlerbehandlugn nötig), oder schreibst es dir gerade selbst runter (als Übung).
Nimm die Funktion atoi (ASCII to INT) aus der Standardbibliothek zur Konvertierung eines Strings in eine Ganzzahl.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int x = 2, y = atoi(argv[1]);
printf("%d * %d = %d\n", x, y, x * y);
return 0;
}
LG