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

Funkcja zwraca wartość 0 podczas gdy powinna zwrócić prawdę.

Ostatnio zmodyfikowano 2014-08-16 19:27
Autor Wiadomość
plsbx
Temat założony przez niniejszego użytkownika
Funkcja zwraca wartość 0 podczas gdy powinna zwrócić prawdę.
» 2014-08-15 16:08:43
Witam próbuję się nauczyć c++ (z ciekawości i chęci). Doszedłem do lekcji http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Funkcje-pierwsze-starcie/291 i napotkałem problem. Próbując zrobić 1 z zadań mam problem z odpowiednim zwracaniem wartości która została wpisana. Gdy wpiszę poprawną wartość za pierwszym razem jest ok, ale gdy za pierwszym razem podam np.: literę to kod odsyła znowu do wpisania liczby co jest dobre. Po wpisaniu dobrej wartości po drugim razie dochodzi do sytuacji w której "return liczba1;" nie oddaje poprawnej wartości.
Wg. tego co wyczytałem miałem tylko zmieniać to co jest w funkcji. I tak przeczytałem dokładnie kolejny raz tamtą lekcje i dalej nie mam pomysłu dlaczego to nie chce działać. Próbowałem również "return liczba1;" zrobić jako alternatywne działanie gdy x == 0, ale dalej ta sama sytuacja.

Gdyby się nie chciało tego czytać to po prostu to skomplikujcie i sprawdźcie co się stanie po wpisaniu litery a po wyskoczeniu błędu liczby.
C/C++
#include <iostream>

int wczytajLiczbe()
{
    int liczba1;
    bool x = 0;
   
    std::cin >> liczba1;
    x = std::cin.fail();
    std::cin.clear();
    std::cin.sync();
    if( x == 1 )
    {
        std::cout << "Blad! Podaj ponownie." << std::endl;
        wczytajLiczbe();
    }
    return liczba1;
}


int main()
{
    std::cout << "Podaj liczbe: ";
    int liczba = wczytajLiczbe();
    std::cout << "Podales liczbe: " << liczba << std::endl;
    return 0;
}

Edit: Już wiem co zrobiłem źle - powinienem użyć pętli, ale dlaczego z if się tak to buguje?
P-115502
1aam2am1
» 2014-08-15 16:57:42
Nie buguje poprostu wywołujesz funkcje a z funkcji a. To powoduje że wywołanie wewnątrz
C/C++
if( x == 1 )
{
    std::cout << "Blad! Podaj ponownie." << std::endl;
    wczytajLiczbe(); //tudostajesz odpowiedz powinieneś ją zwrócić czyli return wczytajLiczbe(); //wtedy powinno działac
}
return liczba1;
P-115506
Jacob99
» 2014-08-15 17:29:26
C/C++
int wczytajLiczbe()
{
    int liczba1;
    std::cin >> liczba1;
   
    if( !std::cin.good() )
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Blad! Podaj ponownie." << std::endl;
        wczytajLiczbe();
    }
    return liczba1;
}
Jeśli używasz funkcji rekurencyjnych to musisz przede wszystkim postawić dobry warunek. Do wyrażenia wartości logicznych boolean (bool) używaj
true
 i
false
, zamiast 1 i 0 (używając stałych literałów liczbowych możesz się łatwo pogubić. Btw. 0 może oznaczać i prawdę i fałsz w zależności od postawionego warunku. Normalnie 0 oznacza fałsz a 1 prawdę, ale jeśli postawimy warunek
if( !true )
 wtedy 0 == prawda, bo prawda jest wtedy, gdy warunek jest spełniony. A ponieważ zero oznacza normalnie fałsz, więc jest różne od prawdy i spełnia warunek(więc jest prawdą jeśli chodzi o spełnienie warunku) :)
P-115507
plsbx
Temat założony przez niniejszego użytkownika
» 2014-08-16 19:27:04
Dziękuję za odpowiedź. Pozdrawiam.
P-115586
« 1 »
  Strona 1 z 1