Kommandozeilenparameter und Typumwandlung

Letztes Update 2020/10/07 12:06

An der Konsole starten wir den Editor Nano:

nano kreis.c

Hier geben wir folgendes ein:

/***********
 * kreis.c *
 ***********/
 
#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, char **argv)
{
if(argc < 2)
{
        printf("\n -- FEHLER ------------");
        printf("\n Keine Zahl eingegeben!");
        printf("\n Aufruf:   ./kreis Zahl");
        printf("\n ----------------------\n");
        return EXIT_FAILURE;
}
 
        double dm, pi = 3.1415;
        dm = strtod(argv[argc-1], NULL);
/*      printf("\n Durchmesser STR: %s", argv[argc-1]); */
        printf("\n Durchmesser: %.2f", dm);
        printf("\n      Umfang: %.2f", dm * pi);
        printf("\n      Fläche: %.2f\n", dm * dm * pi / 4);
        printf(" \n");
        return 0;
}

Um einem Programm beim Start Argumente zu übergeben, wird eine Funktion benötigt. Diese Hauptfunktion main() besitzt zwei Parameter mit den Namen argc und argv.

int main (int argc, char **argv)

Die Namen der Parameter sind frei wählbar. Der erste Parameter beinhaltet die Anzahl von Argumenten. Dabei handelt es sich um einen Integerwert. Im zweiten Parameter stehen die einzelnen Argumente. In diesem Beispiel nur eines.

Bei der Kontrolle, ob eine Eingabe vorgenommen wurde, wird kontrolliert, ob weniger als zwei Argumente vorliegen. Zwei deshalb, da immer der Programmname o.ä. mit übergeben wird. Die tatsächliche Eingabe steht dann als zweites im Array. Im dem Fall, dass kein Parameter beim Programmaufruf übergeben wird, wird das Programm mit einer Fehlermeldung beendet.

return EXIT_FAILURE;

Der Eingabeparameter wird als String übergeben, das heißt, der String muss in eine Zahl umgewandelt werden. Dies geschieht mit der Funktion strtod (String to double). strtod ist in der stdlib.h definiert. In der Zeile

dm = strtod(argv[argc-1], NULL);

wird der String in eine Zahl umgewandelt und in die die als double definierte Variable dm kopiert. Mit dieser Variablen kann nun gerechnet werden. argc-1 ist notwendig, da beim Eintrag in das Array mit 0 begonnen wird und zwei Parameter gezählt werden. Siehe oben.

Beispiele:

pi@server:~/c_kurs $ ./kreis
 -- FEHLER ------------
 Keine Zahl eingegeben!
 Aufruf:   ./kreis Zahl
 ----------------------
pi@server:~/c_kurs $ 
pi@server:~/c_kurs $ ./kreis 2.54 

 Durchmesser: 2.54
      Umfang: 7.98
      Fläche: 5.07

pi@server:~/c_kurs $