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ź
yeslub
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
yeslub
no. Ustawiam długość mojej
tablicy znakówna 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.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
zapewnia, że czyta nie więcej niż 3 znaki.
Anonimowy użytkownik
Potwierdzenie od:
fgets(string, 4, stdin
);
można tutaj przechowywać maksymalnie 3 znaki, w tym jedno miejsce zarezerwowane na znak NULL („\ 0”).
Anonimowy użytkownik
Potwierdzenie od:
szerokość
http://www.cplusplus.com/reference/cstdio/scanf/
i zainstaluj go
jeden mniej
rozmiar ciągu, aby upewnić się, że jest miejsce na terminator .
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ć , aby nie czytał więcej znaków
size - 1
gdzie rozmiar jest długością twojej tablicy, więc w tym przypadku 3:
Anonimowy użytkownik
Potwierdzenie od:
http://www.cplusplus.com/refer ... canf/
/
użyj modyfikatora "szerokość";