kategoria: ANSI C
[#1] scanf() i fflush()
Zalozmy ze mam instrukcje:

ok = scanf("%d", &liczba);

Jesli przez przypadek zamiast liczby podam cos co liczba nie jest to zmienna "ok" przyjmnie wartosc FALSE.
Wg mojej wiedzy wtedy trzeba wykonac fflush(stdin); i wywolac scanfa jeszcze raz.

Jednak pod SAS/C to dziala a pod GCC nawet tym z MOSa jest jakis dziwny problem: program wpada w petle.
Tak jakby fflush() nie zadzialal.

Czy ktos wie dlaczego tak sie dzieje?
[#2] Re: scanf() i fflush()

@Phibrizzo, post #1

Nie wiem gdzie znalazłeś informacje o potrzebie wywołania tego fflush(stdin), ale to nie jest poprawna konstrukcja. Jeżeli działa w SAS/C albo innym kompilatorze to jest to tylko cecha tego kompilatora/jego biblioteki standardowej. Może i nie powinno "wpadać w pętlę", ale używasz funkcji niezgodnie z jej przeznaczeniem więc wina jest po twojej stronie.
[#3] Re: scanf() i fflush()

@kiero, post #2

Ale zawsze moze sie zdarzyc jakis przypadek podania zlych danych.
Wiec jak sie przed tym obronic?
[#4] Re: scanf() i fflush()

@Phibrizzo, post #1

Co do wartości zwracanej przez tę funkcję, to bardziej precyzyjnie scanf() zwraca liczbę poprawnie wczytanych wartości z wejścia (lub EOF).

Czyli scanf("%d", &liczba) zwróci 0, 1 lub EOF.

Z tego co wiem w przypadku niektórych kompilatorów trzeba odczytać jeden znak z wejścia funkcją getchar() po scanf(), żeby przejść dalej w strumieniu wejściowym.

Może spróbuj po scanf() użyć c = getchar() i sprawdzić jaki znak zwraca (kod ASCII). Mam wrażenie, że chodzi o znak nowego wiersza, który trzeba w tym przypadku ręcznie odczytać.

Ostatnia aktualizacja: 30.11.2023 00:53:35 przez Hexmage960
[#5] Re: scanf() i fflush()

@Hexmage960, post #4

Faktycznie, dodanie getchar() pomoglo.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem