Menu
Coddy logo textTech

Wczytywanie ciągu za pomocą scanf

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 14 z 63.

Teraz, gdy rozumiesz, jak działają ciągi znaków z terminatorem null, czas nauczyć się pobierać ciągi znaków od użytkowników. Funkcja scanf może odczytywać ciągi znaków za pomocą specyfikatora formatu %s, ale ma istotne ograniczenia, które musisz poznać.

Aby wczytać ciąg znaków za pomocą scanf, użyj formatu %s i przekaż nazwę swojej tablicy znaków (bez operatora &, ponieważ nazwy tablic są już adresami):

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

Jednak scanf("%s", ...) ma istotne ograniczenie: przestaje odczytywać, gdy tylko napotka biały znak (spację, tabulator lub znak nowej linii). Oznacza to, że jeśli użytkownik wpisze "Hello World", scanf przechwyci tylko "Hello", a "World" pozostawi w buforze wejściowym.

Kolejnym poważnym problemem jest to, że scanf nie sprawdza, czy dane wejściowe zmieszczą się w tablicy. Jeśli ktoś wpisze słowo dłuższe niż to, które może pomieścić tablica, dojdzie do przepełnienia bufora, co może spowodować awarię programu lub stworzyć luki w zabezpieczeniach. Zawsze upewnij się, że tablica znaków jest wystarczająco duża, aby pomieścić oczekiwane dane wejściowe.

Mimo tych ograniczeń scanf("%s", ...) doskonale nadaje się do odczytywania pojedynczych słów, czego właśnie poćwiczysz w nadchodzącym wyzwaniu.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje odczytywanie danych wejściowych typu string od użytkownika za pomocą scanf i wyświetlanie ich. Twój program powinien:

  1. Zadeklarować tablicę znaków o nazwie username z 30 elementami do przechowywania danych wprowadzonych przez użytkownika
  2. Zadeklarować tablicę znaków o nazwie hobby z 25 elementami do przechowywania kolejnej wartości wejściowej
  3. Użyć printf, aby wyświetlić użytkownikowi komunikat "Enter your username:"
  4. Użyć scanf ze specyfikatorem formatu %s, aby odczytać nazwę użytkownika do tablicy username
  5. Użyć printf, aby wyświetlić użytkownikowi komunikat "Enter your hobby:"
  6. Użyć scanf ze specyfikatorem formatu %s, aby odczytać hobby do tablicy hobby
  7. Wyświetlić oba ciągi za pomocą printf w dokładnym formacie pokazanym poniżej

Dane wejściowe zostaną podane jako dwa oddzielne pojedyncze słowa (bez spacji w obrębie każdego słowa).

Wynik powinien wyświetlać dane w następującym formacie:

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

Na przykład, jeśli użytkownik poda "Alice" jako nazwę użytkownika i "reading" jako hobby, wynik powinien wyglądać następująco:

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

To wyzwanie sprawdza, czy rozumiesz używanie scanf ze specyfikatorem formatu %s do odczytywania danych wejściowych typu string, prawidłowe deklarowanie tablic znaków o wystarczającym rozmiarze oraz łączenie danych wprowadzonych przez użytkownika ze sformatowanym wyjściem za pomocą printf.

Spróbuj swoich sił

#include <stdio.h>

int main() {
    // TODO: Zadeklaruj tutaj tablice znaków
    
    // TODO: Napisz tutaj kod, który wyświetli prośbę o dane i odczyta dane wejściowe
    
    // TODO: Wyświetl komunikat końcowy
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online