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.
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
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.
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).
Wczytuj aż do zakończenia wejścia, policz liczbę udanych odczytów.
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.
Ok, pomogło mi while(!feof(stdin)). Problem rozwiązany.