Witam,
Muszę napisać program idiotoodporny. Wprowadzam dane uczniów, m.in. oceny i liczę później średnią ocen. I nie wiem jak stworzyć warunek jeżeli ktoś poda mi do zmiennej ocena takie coś np. "5wfg". Zmienna ocena jest oczywiście typu int. Do mojej zmiennej chcę wczytać tylko "5".
można coś takiego też zrobić, z tym, że to nie sprawdza czy przekroczyłeś zakres:
int getInt()
{
int d;
char s[11];
while (scanf("%d%10[^\n]",&d,s)!=1)
{
scanf("%10[^\n]",s);
printf("nieprawidlowa liczba, sprobuj ponownie:\n");
}
return d;
}
krwq napisał(a):
scanf("%10[^\n]",s);
A jak w buforze będzie więcej niż 10 znaków to dupa z czyszczenia. Lepiej użyć gwiazdki w formacie coby wczytane pole zostało zignorowane zamiast zapisane do zmiennej:
scanf("%*[^\n]");
stfu napisał(a):
to już próbowałem, po wpisaniu "5k" strumień nie jest w stanie błędu.
@krwq
mógłbyś to podać w c++? Kod działa, ale dziwnie to będzie wyglądać jeżeli 100 linijek będzie w c++ a 5 linijek w C :P
do C++ masz linka przecież podanego w pierwszej odpowiedzi... ja osobiście nie lubię wejścia/wyjścia z C++, stąd moja odpowiedź.
sposób z pierwszej odpowiedzi znam, ale nie działa prawidłowo.
W każdym razie wielkie dzięki za pomoc :)
możesz najpierw tekst wczytać do stringa:
string line;
getline(cin,line);
później utworzyć stringstream (#include <sstream>), tylko do odczytu więc dodaję i (input) na początku:
istrinstream ss(line);
i na nim operować:
ss >> liczba;
jeśli chce Ci się bawić oczywiście..