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

[Lekcja 17] wczytaj liczbę

Ostatnio zmodyfikowano 2013-06-21 08:34
Autor Wiadomość
narutoza
Temat założony przez niniejszego użytkownika
[Lekcja 17] wczytaj liczbę
» 2013-06-20 21:14:32
Chcąc zrobić program który wczytuje liczbę w funkcji, a jeżeli jest ona niepoprawna, to pyta jeszcze raz. Jednak "przy realizacji" napodkałem 2 problemy, a mianowicie:
1. podałem że liczba jest intem, tak wiec liczyłem, ze jeśli podam nienaturalną to program wyrzuci błąd. Tak się jednak nie stało. Liczba zczytuje sie do kropki(co akurat rozumiem) i szczęśliwy zwraca odczytaną wartość. Tak było zanim przekombinowałem.
2. Po przekombinowaniu dzieją sie rzeczy niezwykłe, a mianowicie program nie pisze nic po tym jak wstawiam dane.
Kod:
C/C++
#include <iostream>
using namespace std;

int wczytaj_liczbe()
{
    int liczba = 0;
    bool sukces = 0;
    do
    {
        cin >> liczba;
        bool sukces = cin.good();
    } while( sukces == false );
   
    return liczba;
}

int main()
{
    cout << "Podaj liczbe: \n";
    int liczba = wczytaj_liczbe();
    cout << "Twa liczba to " << liczba << endl;
    return 0;
}
P-85874
dallahpl
» 2013-06-20 21:56:45
ciut przekabinowales;)

w funkcji main(), w.g mnie powinienes napisac: wczytaj_liczbe(libcza). Dodatkowo to w w/w funkcji powinienes wpisywac te liczbe, czyli: cin >> liczba;.

C/C++
int main()
{
    int liczba;
    cout << "Podaj liczbe: \n";
    cin >> liczba;
    wczytaj_liczbe( liczba );
    return 0;
}
P-85877
Rafals
» 2013-06-20 23:22:06
Nie wiem czy dobrze zrozumiałem testując Twój problem (sam jestem początkujący) wychodzi na to, że masz zdeklarowaną zmienną "sukces" przed pętlą z wartością "0". Potem w pętli masz znowu deklarację. Teraz z testów wynika, że pętla używa zmiennej z początku funkcji, także w Twoim przypadku zmienna "sukces" będzie zawsze miała wartość "false". Wywal bool-a z pętli, dodaj czyszczenie strumienia i będzie śmigać.

Co do mojego tłumaczenia dlaczego nie działa to tak jak mówię, głowy za poprawność tych wniosków nie dam. Najwyżej ktoś mądrzejszy poprawi.
Pozdrawiam.

@ Dallah
Do funkcji nie musisz przekazywać zmiennych, to co zrobił Narutoza to po prostu teraz ma gotową funkcję do wczytywania zmiennych.
P-85890
cichociemny
» 2013-06-20 23:39:56
Musisz narutoza poczytac wiecej o funkcjach, w tym o bool. Rownie przydatne bedzie lepsze poznanie petli.
P-85892
MrPoxipol
» 2013-06-21 08:34:18
1. Tworzysz 2 zmienne
bool sukces
, ale tylko jednej używasz(lokalnej).
2. Porównaj sobie kod funkcji
int wczytaj_liczbe()
 z tym:
C/C++
int wczytaj_liczbe()
{
    int liczba = 0;
    bool czyOK;
   
    do
    {
        cin >> liczba; // Pobieramy liczbę.
        czyOK = cin.good(); // Zapisujemy do zmiennej 'czyOK' czy pobranie liczby się powiodło.
       
        if( !czyOK ) // Jeśli się nie powiodło
        {
            cout << "Wpisano błędną wartość!" << endl << "Podaj liczbe: "; // Wypisujemy komunikat.
            cin.clear(); // Czyścimy flagi błędów.
            cin.sync(); // Czyścimy bufor(funkcja dla Windows), dla Linuksa jest podana niżej.
            // cin.ignore( numeric_limits < streamsize >::max(), '\n' ); dla użytkowników Linuksa (wymaga <limits>).
        }
    } while( !czyOK );
   
    return liczba;
}
P-85901
« 1 »
  Strona 1 z 1