Latimeria27 Temat założony przez niniejszego użytkownika |
» 2018-11-21 19:45:49 Dziękuję za wskazówki. Próbowałam różnych opcji - z "bool" lub bez - to nie była oryginalna opcja, ponieważ pracuję na jednym kodzie (żaden do tej pory nie zadziałał niestety optymalnie) i bool został przeze mnie dopisany teraz na prośbę pefoksa. Widziałam na forum propozycje kodów bez "bool" i sugestie, że takie rozwiązanie też jest możliwe, dlatego sama zrezygnowałam z bool.
Na ten moment niestety cały czas mam błąd: Process terminated with status -1073741510 (0 minute(s), 5 second(s)).
|
|
YooSy |
» 2018-11-21 19:54:23 int n; while( !( std::cin >> n ) ) { std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); } std::cout << n << '\n'; W twoim kodzie dodaj jeszcze pobieranie liczby przed pętlą lub sprawdzaj stan strumienia przed czyszczeniem, bo metoda igonre czeka na cokolwiek do zignorowania jeśli bufor strumienia jest pusty. Ah.. i przeoczenie. Brakuje znaku kończącego, go którego metoda ingore ma ignorować znaki. |
|
pekfos |
» 2018-11-21 20:04:59 Widziałam na forum propozycje kodów bez "bool" i sugestie, że takie rozwiązanie też jest możliwe, dlatego sama zrezygnowałam z bool. |
Propozycje bez zmiennej bool padają od osób, którym najwyraźniej w głowie się nie mieści, że rozwiązanie zadania z kursu powinno wykorzystywać wiedzę z kursu do tego punktu. Bez dodatkowej zmiennej trzeba albo użyć break, albo pętli while tak jak w tym kopiowanym do bólu skróconym kodzie, który z pewnością zaraz się tu.. ups, za późno! Poprawne rozwiązanie to dodanie pętli do przykładowego kodu z Obsługa strumienia wejściowego. Jedyne o czym trzeba pamiętać, to zasięg zmiennych. Na ten moment niestety cały czas mam błąd: Process terminated with status -1073741510 (0 minute(s), 5 second(s)). |
Niech zgadnę, zamykasz okno konsoli Xem. |
|
Latimeria27 Temat założony przez niniejszego użytkownika |
» 2018-11-23 18:33:34 Udało mi się zmodyfikować kod i uzyskać coś takiego: #include <iostream> #include <limits>
int main() { int liczba; do { std::cout << "Podaj liczbe: "; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cin >> liczba; std::cin.fail(); } while( std::cin.fail() ); std::cout << "Podales liczbe " << liczba << std::endl; return 0; }
Jest to rozwiązanie najbliższe poprawnemu. Program działa, ale dopiero za drugim wpisaniem liczby - pierwsza jest całkowicie ignorowana. Decyzja o poprawności bądź powtórzeniu zapada na podstawie drugiej liczby (testowane). Co do błędu i zamykania Konsoli Xem - nie miałam jak jej inaczej zamykać - nie byłam w stanie zakończyć programu... :) Dziękuję za wszystkie wskazówki - i tak wiem więcej o programowaniu niż miesiąc temu! |
|
pekfos |
» 2018-11-23 18:49:34 Program działa, ale dopiero za drugim wpisaniem liczby - pierwsza jest całkowicie ignorowana. |
Czyli nie działa. |
|
Latimeria27 Temat założony przez niniejszego użytkownika |
» 2018-11-23 18:55:46 Tak tak wiem... Oczywiście, że nie działa. Chodziło mi o to, że moje poprzednie "opcje" były dużo bardziej oddalone od poprawnego działania :)
|
|
YooSy |
» 2018-11-23 20:00:02 metoda igonre czeka na cokolwiek do zignorowania jeśli bufor strumienia jest pusty. | |
|
pekfos |
» 2018-11-23 20:30:43 Dlaczego więc nie strzelać w dziesiątkę z poprawnym rozwiązaniem? Podałem wszystkie informacje. Mowa była o tym kodzie: int liczba; std::cin >> liczba; bool bCzyBlad = std::cin.fail(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); Wymaga tylko minimalnych modyfikacji by można go było po prostu wrzucić do pętli. Wszystkie instrukcje są we właściwej kolejności. Dokładne działanie tych metod i dlaczego taka kolejność ma być, a nie inna, zostały opisane w "Czyszczenie zawartości strumienia wejściowego" w Obsługa strumienia wejściowego. |
|
1 « 2 » 3 |