Poprawienie funkcji skanującej

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(); }
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.

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

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

0

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

0

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

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

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

0
while (getchar() != '\n');
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;
    }
}
0

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

0

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

0

Propozycja ze sscanf wydaje się dobra, tylko może pojawić się problem kiedy nie będzie żadnej liczby.
char buf[32]; int liczba; scanf("%s",buf); sprintf(buf,"%s %d",buf,1);// tak zabezpieczysz się przed tym sscanf(buf,"%d",&liczba);

0

Przekombinowane, sscanf jest w miarę bezpieczny i zwraca liczbę poprawnych dopasowań, więc wystarczy tylko sprawdzić ifem i zrobić pętle.

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