Kapitel 7 Unit 34 von 36 Theorie + Übungen Dauer: ~100 Min.
Ömer
Ömer sagt:

Mit argc und argv werden deine Programme echte Kommandozeilen-Werkzeuge! Statt Werte immer einzutippen, übergibst du sie direkt beim Programmstart. Das ist professionell und super praktisch!

main(int argc, char *argv[]) schreiben argc und argv auslesen atoi / atof anwenden Argumente validieren Kommandozeilen-Programme bauen
Übung 1

argv-Tabelle befüllen

Das Programm wird folgendermaßen aufgerufen:

SHELL
./programm Hallo 42 3.14

Fülle die Tabelle aus:

VariableWert
argc
argv[0]
argv[1]
argv[2]
argv[3]

Was enthält argv[argc] (also argv[4])?

argv[0] ist immer der Programmname – zähle ihn mit!
Übung 2

Alle Argumente ausgeben

Schreibe ein Programm das alle übergebenen Argumente mit Index auf eigenen Zeilen ausgibt. Beispielaufruf und Ausgabe:

SHELL
./liste rot gruen blau
argv[0] = ./liste
argv[1] = rot
argv[2] = gruen
argv[3] = blau
#include <stdio.h> int main(int argc, char *argv[]) { /* Alle Argumente mit Schleife ausgeben */ return 0; }
Nutze eine for-Schleife von i=0 bis i<argc und gib argv[i] aus.
Übung 3

Zahl verdoppeln

Schreibe das Programm verdoppele: Es erwartet genau eine Zahl als Argument und gibt das Doppelte aus. Prüfe ob argc stimmt!

SHELL
./verdoppele 7
Ergebnis: 14

./verdoppele
Verwendung: ./verdoppele Zahl
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { /* 1. argc prüfen */ /* 2. Zahl konvertieren mit atoi */ /* 3. Doppeltes ausgeben */ return 0; }
Vergiss nicht: argc == 2 bedeutet genau 1 Argument (+ Programmname).
Übung 4

Argument-Validator

Schreibe ein Programm das genau 3 Argumente erwartet (neben dem Programmnamen also argc == 4). Bei falscher Anzahl soll eine hilfreiche Fehlermeldung erscheinen:

SHELL
./validator vorname nachname alter
Hallo, vorname nachname! Du bist alter Jahre alt.

./validator nur_ein_arg
Fehler: 3 Argumente erwartet, 1 erhalten.
Verwendung: ./validator vorname nachname alter
#include <stdio.h> int main(int argc, char *argv[]) { if (argc != 4) { /* Fehlermeldung mit tatsächlicher Anzahl */ /* Tipp: argc - 1 = Anzahl der übergebenen Argumente */ return 1; } /* Ausgabe mit argv[1], argv[2], argv[3] */ return 0; }
argc - 1 gibt die Anzahl der Benutzer-Argumente (ohne Programmname) an.
Übung 5 – Programm

Einheitenkonverter

Schreibe ./einheit 100 km m – ein Programm das Einheiten umrechnet. Es soll folgende Umrechnungen unterstützen:

SHELL
./einheit 100 km m
100.00 km = 100000.00 m

./einheit 250 m cm
250.00 m = 25000.00 cm
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { if (argc != 4) { printf("Verwendung: %s wert von_einheit nach_einheit\n", argv[0]); return 1; } double wert = atof(argv[1]); /* argv[2] = Quell-Einheit, argv[3] = Ziel-Einheit */ /* strcmp(argv[2], "km") == 0 prüft ob argv[2] gleich "km" */ return 0; }
Nutze strcmp() aus string.h um Strings zu vergleichen: strcmp(s1,s2)==0 wenn gleich.
Bonus

Statistik von beliebig vielen Zahlen

Schreibe ./statistik 3 5 8 2 9 1 – das Programm liest beliebig viele Integer-Argumente und gibt aus:

SHELL
./statistik 3 5 8 2 9 1
Anzahl:  6
Min:     1
Max:     9
Summe:   28
Schnitt: 4.67
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc < 2) { printf("Verwendung: %s zahl1 zahl2 ...\n", argv[0]); return 1; } /* argc - 1 = Anzahl der Zahlen (argv[1] bis argv[argc-1]) */ int n = argc - 1; /* Min, Max, Summe initialisieren */ /* Schleife über alle Zahlen */ /* Ausgabe */ return 0; }
Initialisiere min und max mit dem ersten Wert (atoi(argv[1])), dann vergleiche mit allen weiteren.