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.
Więcej/Mniej danych na wejście niż zakłada program
- Rejestracja: dni
- Ostatnio: dni
- Postów: 49
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5068
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5068
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 49
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).
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Wczytuj aż do zakończenia wejścia, policz liczbę udanych odczytów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5068
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 49
Ok, pomogło mi while(!feof(stdin)). Problem rozwiązany.