Podanie przez uzytkownika liczby naturalnej w pętli, puki nie zostanie podana prawidłowo
Ostatnio zmodyfikowano 2016-12-04 23:09
KrayteR Temat założony przez niniejszego użytkownika |
Podanie przez uzytkownika liczby naturalnej w pętli, puki nie zostanie podana prawidłowo » 2016-12-04 22:05:28 Hej! Mam problem z pewnym zadankiem o treści: Napisz program, który prosi użytkownika o podanie liczby naturalnej. Robi to tak długo, aż dane będą poprawne (tzn. wpisana zostanie liczba naturalna, a później ENTER). Napisałem już coś takiego, aczkolwiek nie działa, czy jest ktoś w stanie przeanalizować kod i powiedzieć co robię źle? #include <stdio.h> #include <math.h>
int main() { int i; printf( "Program prosi po podanie liczby naturalnej tak dlugo puki nie zostanie ona podana\nAutor programu: xxx\n" ); while( scanf_s( "%d", & i ) != 1 || getchar() != '\n' || i < 0 ) { printf( "Podano bledne dane, sprobuj jeszcze raz\n" ); i = getchar(); } printf( "Podana liczba to: %d\n", i ); return 0; }
|
|
carlosmay |
» 2016-12-04 22:22:49 np. unsigned int .Nie przemyślałem tego. |
|
KrayteR Temat założony przez niniejszego użytkownika |
» 2016-12-04 22:36:03 Niewiele to zmieniło, nadal program po wpisaniu np "asdasdas" wypisuje mi "błędne dane" osiem razy a nie raz. |
|
carlosmay |
» 2016-12-04 22:48:40 Zrekompensuje się i dam ci kod: #include <stdio.h>
void eat_char() { char c; while(( c = getchar() ) != '\n' && c != EOF ) { } }
int main() { int natural_num; while( scanf( "%d", & natural_num ) == 0 || natural_num < 0 ) { printf( "Niepoprawna wartosc\n" ); eat_char(); } printf( "%d", natural_num ); } |
|
KrayteR Temat założony przez niniejszego użytkownika |
» 2016-12-04 22:52:11 @carlosmay O ile Twój kod działa doskonale, o tyle nie mogę go użyć, zadanie te jest mi potrzebne na studia i musi być zrobione jak najprościej, coś tak zaawansowanego nie przejdzie :( |
|
carlosmay |
» 2016-12-04 22:57:55 coś tak zaawansowanego nie przejdzie :( |
? Tam nie ma nic zaawansowanego. No może funkcja, którą napisałem dla wygody. Możesz instrukcje z funkcji wrzucić do pętli sprawdzającej poprawność danych: int main() { int natural_num; while( scanf( "%u", & natural_num ) == 0 || natural_num < 0 ) { printf( "Niepoprawna wartosc\n" ); char c; while(( c = getchar() ) != '\n' ) { } } printf( "%u", natural_num ); } PS: Zdobywanie wiedzy we własnym zakresie jest karalne? edit: uprościłem pozbywania się danych. |
|
KrayteR Temat założony przez niniejszego użytkownika |
» 2016-12-04 23:09:35 Zdobywanie wiedzy we własnym zakresie nie jest karalne, aczkolwiek używanie jej na sprawdzianach u mojej Pani Profesor już tak :( Teraz wygląda elegancko, Wielkie dzięki! |
|
« 1 » |