Menu
Coddy logo textTech

String-Eingabe mit scanf

Teil des Abschnitts Logik & Ablauf 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 eine Zeichenkette mit scanf einzulesen, verwendest du das Format %s und übergibst den Namen deines Zeichenarrays (ohne den Operator &, da Arraynamen 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

Schreibe ein C-Programm, das demonstriert, wie man mit scanf Zeichenketteneingaben vom Benutzer liest und wieder ausgibt. Dein Programm sollte:

  1. Ein Zeichenarray namens username mit 30 Elementen deklarieren, um die Eingabe des Benutzers zu speichern
  2. Ein Zeichenarray namens hobby mit 25 Elementen deklarieren, um eine weitere Eingabe zu speichern
  3. printf verwenden, um den Benutzer mit der Nachricht „Gib deinen Benutzernamen ein:“ aufzufordern
  4. scanf mit dem Formatspezifizierer %s verwenden, um den Benutzernamen in das Array username einzulesen
  5. printf verwenden, um den Benutzer mit der Nachricht „Gib dein Hobby ein:“ aufzufordern
  6. scanf mit dem Formatspezifizierer %s verwenden, um das Hobby in das Array hobby einzulesen
  7. Beide Zeichenketten mit printf exakt im unten gezeigten Format ausgeben

Die Eingabe wird als zwei separate einzelne Wörter bereitgestellt (ohne Leerzeichen innerhalb der einzelnen Wörter).

Deine 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 folgendermaßen aussehen:

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

Diese Aufgabe prüft dein Verständnis der Verwendung von scanf mit dem Formatspezifizierer %s zum Einlesen von Zeichenkettendaten, der korrekten Deklaration eines Zeichenarrays mit ausreichender Größe sowie der Kombination von Benutzereingaben mit formatierter Ausgabe mithilfe von printf.

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 Logik & Ablauf

Übe selbstständig: Online-C-Compiler