Czytaj nie więcej niż rozmiar linii za pomocą scanf ()


Edycja: w mojej klasie muszę używać
scanf
. Dlatego zalecanie innych metod wprowadzania danych nie jest rozwiązaniem, którego szukam (jeśli istnieje taki, który zawiera scanf).
Jeśli czytam dane wejściowe użytkownika dotyczące małego projektu (np. Gry). Powiedzmy, że zapytam
czy chcesz zagrać?
, to przyjmie odpowiedź
yes
lub
no
. Więc piszę ten prosty kod:
#include <stdio.h>int main(void)
{
char string[3];//The max number of letters for "yes". printf("Would you like to play?");
scanf("%s", string);
}

Dlatego ten kod powinien po prostu poprosić ich o wpisanie
yes
lub
no
. Ustawiam długość mojej
tablicy znaków
na rozmiar
3
. Zatem jest wystarczająco duży, aby pomieścić zarówno
yes
, jak i
no
. Ale gdyby ktoś wprowadził nieprawidłowe dane wejściowe, takie jak
yesss
, wiem, jak porównać ciąg po obsłudze takiego zdarzenia, ale czy technicznie/prawdopodobnie nie nadpisze innych zmiennych lokalnych, które zadeklarowałem, ponieważ wykraczać poza długość mojej tablicy? Jeśli tak, czy istnieje sposób na to, aby ograniczyć do 3 znaków wejściowych lub coś innego? A jeśli nie, to dlaczego/skąd wie, że należy wpisać tylko rozmiar 3?
* Uwaga: jestem nowy w C i nie mogłem znaleźć o nim zbyt wiele, więc doceniam to, nawet jeśli jest to proste. Ponieważ wyraźnie czegoś mi brakuje. Pochodzę ze środowiska Java, w którym to nawet nie byłoby problemu.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Twoja tablica powinna być w stanie zawierać cztery znaki
char
, ponieważ powinna również zawierać 0-Terminator. W takim przypadku wskazanie maksymalnej długości w formacie jest stałe,
scanf("%3s", string);

zapewnia, że ​​
scanf
czyta nie więcej niż 3 znaki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

najbezpieczniejszym sposobem jest użycie

fgets(string, 4, stdin

);
można tutaj przechowywać maksymalnie 3 znaki, w tym jedno miejsce zarezerwowane na znak NULL („\ 0”).
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz użyć modyfikatora

szerokość
scanf()
http://www.cplusplus.com/reference/cstdio/scanf/
i zainstaluj go

jeden mniej

rozmiar ciągu, aby upewnić się, że jest miejsce na terminator
NULL
.
Tak więc, jeśli chcesz zapisać „tak”, najpierw potrzebujesz większej tablicy niż ta, którą masz; jeden o rozmiarze 4, 3 znaki plus 1 dla null Terminator. Powinieneś także poinstruować
scanf ()
, aby nie czytał więcej znaków

size - 1

gdzie rozmiar jest długością twojej tablicy, więc w tym przypadku 3:
#include <stdio.h>int main(void)
{
char string[4];
scanf("%3s", string);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

http://www.cplusplus.com/refer ... scanf
http://www.cplusplus.com/refer ... canf/
/
użyj modyfikatora "szerokość";
%[*][width][modifiers]type

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się