Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Strumień wejściowy i pętla do .. while

Ostatnio zmodyfikowano 2011-07-08 14:00
Autor Wiadomość
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 :)
P-35516
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 :))
P-35519
DejaVu
» 2011-07-08 12:18:00
Czyszczenie strumienia jest konieczne.
P-35521
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?
P-35522
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.
P-35523
Nevervell
» 2011-07-08 13:28:12
Podaj kod to coś zdziałamy.
P-35532
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?
P-35537
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.
P-35540
« 1 » 2
  Strona 1 z 2 Następna strona