Ö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:
Fülle die Tabelle aus:
| Variable | Wert |
| 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:
./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!
./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:
./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:
km → m: mal 1000
m → km: durch 1000
m → cm: mal 100
cm → m: durch 100
./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:
- Minimum und Maximum
- Summe aller Zahlen
- Durchschnitt (als double)
./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.