Więcej/Mniej danych na wejście niż zakłada program

0

Problem dotyczy języka C.
Nie wiem jak wykryć czy nie wprowadzono więcej lub mniej danych na wejście niż zakłada mój program.
W sensie np. używam zwykły scanf raz do wczytania jednej zmiennej, a na wejściu podawane są dwie zmienne.

0

feof() wywołane z stdin jako argumentem powinno załatwić sprawę jeśli się nie mylę.

0

scanf ma parametr width, który ogranicza długość danych:

    int a; 
	scanf("%2d", &a); // <- 123
	printf("%d\n", a); // -> 12

https://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html

0

Chyba nie chodzi o dwa znaki wejścia tylko rozdzielone obiekty. Jeśli Podasz dwie zmienne oddzielone spacją, a Podasz tylko jeden parametr do konwersji, to scanf wczyta tylko pierwszy.

0

Width mi nie pomoże bo nie znam długości danych, feof jeśli sprawdza czy wszystkie dane z jakiegoś pliku zostały wczytane(tak to zrozumiałem) też mi nie pomoże.
Chodzi o to, że jeśli np. uruchomię program z poziomu terminala i w tej samej linijce dam echo "1 2 3", coś w stylu "./.a.out < echo"1 2 3", nie pamiętam jak to dokładnie szło i też nie mam dostępu do linuxa, to wtedy potrzebuję wykryć, że dane są niepoprawne, bo mój program działa poprawnie tylko dla 2 wczytanych zmiennych, bo mam dwa pojedyncze scanf typu scanf("%i", &n).

0

Wczytuj aż do zakończenia wejścia, policz liczbę udanych odczytów.

0

Nie wiem, jak to dokładnie Czytasz, ale program:

#include <stdio.h>

int main(int argc, char **argv){
	int a, b;
	scanf("%d%d", &a, &b);
	printf("%d, %d\n", a, b);
	return 0;
}

Uruchomiony:

%>./a.out < data

Jeśli w pliku data jest 1 2 3 czy

1
     2
3

Odczyta i umieści w a i b tylko 1 i 2.
Jak nie, to Czytaj z pliku określoną liczbę bajtów, albo Skanuj plik do tablicy znaków i teraz Waliduj wejście.

0

Ok, pomogło mi while(!feof(stdin)). Problem rozwiązany.

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