[C++] Strumień wejściowy i pętla do .. while
Ostatnio zmodyfikowano 2011-07-08 14:00
horus_cpp Temat założony przez niniejszego użytkownika |
[C++] Strumień wejściowy i pętla do .. while » 2011-07-08 12:11:34 Witam, napotkałem na pewne utrudnienie związane z zadaniami z działu nt. Pętla do...while. A mianowicie do wykorzystania pierwszego zadania potrzebne nam jest oczywiście wiedza z lekcji nt. obslugi strumienia wejściowego. Oczywiście z tym wszystkim zapoznałem się w miarę możliwości, chociaż ominąłem pewien punkt a jest to:
[quote]Czyszczenie zawartości strumienia wejściowego Jeśli chcemy mieć większą kontrolę nad strumieniem wejściowym to powinniśmy czyścić jego zawartość przed każdym wczytaniem danych. Aby to zrobić musimy wywołać dwie metody strumienia std::cin. Pierwszą z nich jest std::cin.clear(), która czyści flagi błędu. Drugą metodą jest std::cin.sync(), która czyści bufor strumienia. Kod, który wyczyści zawartość bufora będzie wyglądał następująco: std::cin.clear(); std::cin.sync();[/quote]
Nie rozumiem gdzie taki kod mam umieszczać? Nigdzie nie ma tego napisane na lekcji a szczególnie, żadnego podanego wzoru z tym zadaniem z wyjątku do tego Linux'owego.
Problem szczególnie mam z tym punktem zadania: [quote]2. Jeżeli błąd, wróć do kroku 1. [/quote]
Nie mam pojęcia, jak program po wpisaniu np. za dużej liczby albo liter ma wrócić do pierwszego punktu. Zastosowałem raz metodę: [quote]if (liczba > 21478364) std::cout << "Podaj jeszcze raz liczbe." << std::endl; std::cin >> liczba;[/quote]
Ale ta metoda sie nie sprawdza, bo po wpisaniu wiekszej liczby lub litery program odpowiadal, ze wpisano liczbę 2... a nic takiego w kodzie nie było.
Czekam na odpowiedzi :) |
|
Nevervell |
» 2011-07-08 12:16:44 Czyszczenie strumienia wejściowego w zadaniach z kursu jest delikatnie mówiąc zupełnie nie konieczne nie musisz się tym przejmować.
Co do kodu..
To nie chce Ci dawać gotowca bo chyba nie o o chodzi ;) Podpowiem że do wykonania tego zadania jest właśnie konieczna pętla ( do{...}while się nada :)) |
|
DejaVu |
» 2011-07-08 12:18:00 Czyszczenie strumienia jest konieczne. |
|
Nevervell |
» 2011-07-08 12:19:40 :D muszę mieć informacje ze starszej wersji kursu sorry
@edit Ale uważam że ( przed chwilą przejrzałem to zadanie) do tego akurat nie jest konieczne czyszczenie strumienia. Jeśli owszem.... proszę mnie oświecić jak zrobiłem je bez niego? |
|
horus_cpp Temat założony przez niniejszego użytkownika |
» 2011-07-08 12:24:28 Właśnie, czyli jednak czyszczenie strumienia jest konieczne w tym zadaniu. Więc konkretnie jak powinno być umiejscowione w kodzie? Mógłby ktoś pokazać takowy przykład?
@Nevervell: Dziękuje za podanie mi podpowiedzi, właśnie zaraz się wezmę za tą metodę.
@edit: Sorki, nie było mnie przez chwilę. Właśnie wykorzystałem sposób do{...}while, oczywiście wszystko dobrze, ale jaki powinnien być warunek końcówy while? Niestety nie mam pojęcia jak ominąć wpisywanie liter. Zawsze jak sie wpisze jakąś litere, program odpowiada, że "Twoja liczba to: 2". Przynajmniej takiego sposobu nie widziałem na kursie z wykorzystaniem tejże pętli. |
|
Nevervell |
» 2011-07-08 13:28:12 Podaj kod to coś zdziałamy. |
|
horus_cpp Temat założony przez niniejszego użytkownika |
» 2011-07-08 13:33:27 #include <iostream> #include <conio.h> int main() { int liczba; do{ std::cout << "Podaj swoja ulubiona liczbe." << std::endl; std::cin >> liczba; }while ( liczba <= 0 ); std::cout << "Twoja ulubiona liczba jest: " << liczba << std::endl; getch(); return 0; }
btw. Czy to forum ma skrypt na cytowanie C++/C/C# itp? |
|
SeaMonster131 |
» 2011-07-08 13:39:30 Czyść bufor na początku pętli. btw. Czy to forum ma skrypt na cytowanie C++/C/C# itp? |
[cpp] kodzik [/cpp] I daj } while( std::cin.fail() ); Kiedy wpiszesz liczbę pętla zakończy swoje działanie, lecz kiedy wpiszesz litery to pętla wykona się jeszcze raz. |
|
« 1 » 2 |