Menu
Coddy logo textTech

String-Eingabe mit scanf

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 14 von 63.

Nachdem Sie nun verstehen, wie Strings mit dem Null-Terminator funktionieren, ist es an der Zeit zu lernen, wie man String-Eingaben von Benutzern erhält. Die Funktion scanf kann Strings mit dem Formatbezeichner %s lesen, bringt jedoch wichtige Einschränkungen mit sich, die Sie verstehen müssen.

Um einen String mit scanf zu lesen, verwenden Sie das %s-Format und übergeben den Namen Ihres Character-Arrays (ohne den &-Operator, da Array-Namen bereits Adressen sind):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Allerdings hat scanf("%s", ...) eine entscheidende Einschränkung: Es hört auf zu lesen, sobald es auf ein Whitespace-Zeichen (Leerzeichen, Tabulator oder Zeilenumbruch) stößt. Das bedeutet, wenn ein Benutzer "Hello World" eingibt, wird scanf nur "Hello" erfassen und "World" im Eingabepuffer belassen.

Ein weiteres ernstes Problem ist, dass scanf nicht prüft, ob die Eingabe in Ihr Array passt. Wenn jemand ein Wort eingibt, das länger ist, als Ihr Array aufnehmen kann, führt dies zu einem Pufferüberlauf, was potenziell Ihr Programm zum Absturz bringen oder Sicherheitslücken erzeugen kann. Stellen Sie immer sicher, dass Ihr Zeichen-Array groß genug für die erwartete Eingabe ist.

Trotz dieser Einschränkungen ist scanf("%s", ...) perfekt geeignet, um einzelne Wörter zu lesen, was genau das ist, was Sie in der kommenden Herausforderung üben werden.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das das Einlesen von Zeichenfolgen vom Benutzer mit scanf und deren anschließende Ausgabe demonstriert. Ihr Programm sollte:

  1. Deklarieren Sie ein Zeichen-Array namens username mit 30 Elementen, um die Eingabe des Benutzers zu speichern
  2. Deklarieren Sie ein Zeichen-Array namens hobby mit 25 Elementen, um eine weitere Eingabe zu speichern
  3. Verwenden Sie printf, um den Benutzer mit der Nachricht "Enter your username:" aufzufordern
  4. Verwenden Sie scanf mit dem Formatbezeichner %s, um den Benutzernamen in das username-Array einzulesen
  5. Verwenden Sie printf, um den Benutzer mit der Nachricht "Enter your hobby:" aufzufordern
  6. Verwenden Sie scanf mit dem Formatbezeichner %s, um das Hobby in das hobby-Array einzulesen
  7. Geben Sie beide Zeichenfolgen mit printf in dem unten gezeigten exakten Format aus

Die Eingabe erfolgt in Form von zwei separaten einzelnen Wörtern (keine Leerzeichen innerhalb der Wörter).

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

Wenn der Benutzer beispielsweise "Alice" als Benutzernamen und "reading" als Hobby eingibt, sollte die Ausgabe wie folgt aussehen:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Diese Herausforderung testet Ihr Verständnis für die Verwendung von scanf mit dem Formatbezeichner %s zum Lesen von Zeichenfolgen, die korrekte Deklaration von Zeichen-Arrays mit ausreichender Größe und die Kombination von Benutzereingaben mit formatierter Ausgabe unter Verwendung von printf.

Spickzettel

Um String-Eingaben von Benutzern zu lesen, verwenden Sie scanf mit dem Formatbezeichner %s:

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Wichtige Einschränkungen von scanf("%s", ...):

  • Stoppt das Lesen bei jedem Whitespace-Zeichen (Leerzeichen, Tabulator, Zeilenumbruch)
  • Erfasst nur einzelne Wörter – "Hello World" wird zu lediglich "Hello"
  • Kein Schutz vor Pufferüberlauf – stellen Sie sicher, dass Ihr Array groß genug ist
  • Verwenden Sie den &-Operator nicht bei Array-Namen (diese sind bereits Adressen)

Probier es selbst

#include <stdio.h>

int main() {
    // TODO: Deklarieren Sie hier Ihre Zeichen-Arrays
    
    // TODO: Schreiben Sie hier Ihren Code, um die Eingabe aufzufordern und zu lesen
    
    // TODO: Geben Sie die endgültige Ausgabenachricht aus
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow