Poprawienie funkcji skanującej

Odpowiedz Nowy wątek
2017-11-13 14:42
0

Witam, potrzebuje pomocy z moją funkcją która nie spełnia w pełni założonych wymagań. Mianowicie, gdy w programie będzie przypadek jak w mainie to po wpisaniu w konsoli np. 1 ,,spacja'' 2 to liczba 1 zostanie przyporzadkowana do X a liczba 2 zostanie przyporządkowana do Y. Da się to jakoś obejść?

int lepszyScanf()
{
    int liczba;
    while (1)
    {
        if (!scanf("%d", &liczba))
        {
            while (getchar() != '\n');
            printf("Sprobuj ponownie \n");
        }
        else return liczba;
    }
}
main() {
int x;
int y;
x=lepszyScanf();
y=lepszyScanf(); }
edytowany 1x, ostatnio: kq, 2017-11-13 14:43

Pozostało 580 znaków

2017-11-13 14:45
kq
0

potrzebuje pomocy z moją funkcją która nie spełnia w pełni założonych wymagań.

A jakie są wymagania? Czy po wczytaniu liczby program ma zostać wyłączony? Jeśli tak to wywołaj exit(0). Wtedy przy wpisaniu 1 2 na pewno 2 nie zostanie przypisane do drugiej zmiennej.


edytowany 1x, ostatnio: kq, 2017-11-13 14:47

Pozostało 580 znaków

2017-11-13 14:52
0

Chciałbym aby po wpisaniu np. 1 spacja 2 liczba 1 została przypisana X, dwójka została ,,zapomniana" i w konsoli pojawiła się znowu opcja wczytania wartości, ale tym razem dla Y. Nie wiem czy wyrażam się jasno :D Oczywiście wszystkie znaki mają być traktowane jako błąd

edytowany 1x, ostatnio: xdkuba111, 2017-11-13 14:52

Pozostało 580 znaków

2017-11-13 14:53
kq
0

W takim razie po poprawnym wczytaniu liczby również ignoruj wszystkie znaki aż do napotkania \n, albo wczytaj pierw całą linię do bufora i z niej za pomocą sscanf wczytaj tylko jedną liczbę.


Pozostało 580 znaków

2017-11-13 15:04
0

A jak zakodzić opcję pierwszą? tj. ignorowanie znaków po poprawnym wczytaniu?

Pozostało 580 znaków

2017-11-13 15:06
kq
0

Nie pisałeś tego kodu sam? Przecież już to robisz jak zostanie wpisanego coś innego niż liczba:

while (getchar() != '\n');

Pozostało 580 znaków

2017-11-13 15:08
0

Źle sie wyraziłem, chodziło o jak w takim razie po poprawnym wczytaniu liczby zignorować wszystkie znaki aż do napotkania \n

Pozostało 580 znaków

2017-11-13 15:08
kq
0
while (getchar() != '\n');

Pozostało 580 znaków

2017-11-13 15:14
0

takie coś niestety nie działa :/

int lepszyScanf()
{
    int liczba;
    while (1) {
        if (!scanf("%d", &liczba)) {
            while (getchar() != '\n')
                ;
            printf("Sprobuj ponownie \n");
        }
        else
            while (getchar() != '\n')
                ;
        return liczba;
    }
}
edytowany 1x, ostatnio: kq, 2017-11-13 15:15

Pozostało 580 znaków

2017-11-13 15:18
kq
0

U mnie działa. Przy okazji: nie dodałeś {}, więc return liczba jest bezwarunkowe


Pozostało 580 znaków

2017-11-13 15:23
0

Dla liczb zaczęło działać, jednak gdy wpiszemy jakieś litery to dzieją się dziwne rzeczy :/

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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