pobranie danych do int'a

0

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".

0

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;
}
0
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]");
1
stfu napisał(a):

Zabezpieczenie przed wpisywaniem liter

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

0

do C++ masz linka przecież podanego w pierwszej odpowiedzi... ja osobiście nie lubię wejścia/wyjścia z C++, stąd moja odpowiedź.

0

sposób z pierwszej odpowiedzi znam, ale nie działa prawidłowo.
W każdym razie wielkie dzięki za pomoc :)

0

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..

1 użytkowników online, w tym zalogowanych: 0, gości: 1