Zurück zu: C Tutorial
Benutzereingabe
Du hast bereits gelernt, dass printf()
in C zur Ausgabe von Werten verwendet wird.
Um Benutzereingaben zu erhalten, kannst du die Funktion scanf()
verwenden:
Beispiel
Gibt eine vom Benutzer eingegebene Nummer aus:
// Erstellen Sie eine Integer-Variable, die die Zahl speichert, die wir vom Benutzer erhalten
int meineZahl;
// Frage den Nutzer nach der Eingabe
printf("Type a number: \n");
// Lies die Eingabe des Nutzers ein
scanf("%d", &meineZahl);
// Gib die Eingabe des Nutzers aus
printf("Du hast eingegeben: %d", meineZahl);
Die Funktion
scanf()
verwendet zwei Argumente: den Formatbezeichner der Variable (%d
im obigen Beispiel) und den Referenzoperator (&meineZahl
), der die Speicheradresse der Variable speichert.Tipp: Mehr zu Speicheradressen und Funktionen erfährst Du im nächsten Kapitel.
Mehrere Eingänge
Die Funktion scanf()
erlaubt auch mehrere Eingaben (im folgenden Beispiel eine Ganzzahl und ein Zeichen):
Beispiel
// Deklariere eine int- und eine char-Variable
int meineZahl;
char meinZeichen;
// Frage den Nutzer
printf("Gib eine Ganzzahl und ein Zeichen ein und drücke Enter: \n");
// Lies die Eingaben des Nutzers konkret ein
scanf("%d %c", &meineZahl, &meinZeichen);
// Gib die Zahl aus
printf("Deine Zahl ist: %d\n", meineZahl);
// Gib das Zeichen aus
printf("Dein Zeichen ist: %c\n", meinZeichen);
String Eingabe übernehmen
Du kannst auch eine vom Benutzer eingegebene Zeichenfolge abrufen:
Beispiel
Den Namen eines Benutzers ausgeben:
// Deklariere einen String
char vorname[30];
// Frage den Nutzer
printf("Gib einen Vornamen ein: \n");
// Lies die Nutzereingabe ein
scanf("%s", vorname);
// Gib den Namen aus
printf("Hallo %s", vorname);
Hinweis: Wenn Du in
scanf()
mit Zeichenfolgen arbeitest, musst Du die Größe der Zeichenfolge/des Arrays angeben (wir haben eine sehr hohe Zahl verwendet, in unserem Beispiel 30, aber dann können wir zumindest sicher sein, dass genügend Zeichen für den Vornamen gespeichert werden) und Du musst den Referenzoperator (&
) nicht verwenden.
Die Funktion scanf()
hat jedoch einige Einschränkungen: Sie betrachtet Leerzeichen (Whitespace, Tabulatoren usw.) als Abschlusszeichen, was bedeutet, dass sie nur ein einzelnes Wort einlesen kann (selbst wenn Sie viele Wörter eingeben). Beispiel:
Beispiel
char name[30];
printf("Gib Vor- und Nachname ein: \n");
scanf("%s", &name);
printf("Hallo %s", name);
// Gib Vor- und Nachname ein: Klaus Muster
// Hallo Klaus
Aufgrund des obigen Beispiels würdest Du erwarten, dass das Programm „Klaus Muster“ ausgibt. Es gibt jedoch nur „Klaus“ aus.
Deshalb verwenden wir beim Arbeiten mit Zeichenfolgen häufig die Funktion fgets()
, um eine Textzeile zu lesen. Beachte, dass Du die folgenden Argumente angeben musst: den Namen der Zeichenfolgenvariable, sizeof
(string_name) und stdin
:
Beispiel
char name[30];
printf("Gib Vor- und Nachname ein: \n");
fgets(name, sizeof(name), stdin);
printf("Hallo %s", name);
// Gib Vor- und Nachname ein: Klaus Muster
// Hello Klaus Muster
Verwende die Funktion
scanf()
, um ein einzelnes Wort als Eingabe zu erhalten, und verwendefgets()
für mehrere Wörter.