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

Problem z wykonaniem zadania z lekcji o funkcjach.

Ostatnio zmodyfikowano 2015-03-24 20:38
Autor Wiadomość
Yaoo
Temat założony przez niniejszego użytkownika
Problem z wykonaniem zadania z lekcji o funkcjach.
» 2015-03-24 20:03:46
Witam :)
Otóż wydawało mi się, że wiedzę dot. funkcji przyswoiłem dobrze, ale gdy zabrałem się za zadanie domowe... Naprawdę nie wiem, co jest tu źle. Zadanie brzmi tak:

Napisz funkcję, która będzie wczytywała liczby ze standardowego wejścia i zwracała wczytaną wartość. Funkcja ma zagwarantować, że zwracana liczba zawsze jest poprawna. Oznacza to, że funkcja będzie musiała pytać użytkownika o wprowadzenie liczby dopóki nie poda poprawnej.

A oto i mój kod:
C/C++
#include <iostream>

int wczytajLiczbe()
{
    int a;
    bool b = std::cin.fail();
    do
    {
        std::cin >> a;
        std::cout << "Czy cos nawalilo? " << std::cin.fail();
    } while( b = 1 );
   
    return a;
}

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

Próbowałem też fragment
std::cout << "Czy cos nawalilo? " << std::cin.fail();

zamienić na
std::cout << "Czy wszystko dziala? " << std::cin.good();

ale bez skutku.

Proszę o pomoc :/
P-129083
Brunon3
» 2015-03-24 20:07:03
} while( b = 1 );

Daj
} while( b == 1 );
.

----

Podaj pełny log kompilacji. Chyba reszta jest dobrze, może się mylę, bo to taka półminutowa analiza.

-BD.
P-129085
pekfos
» 2015-03-24 20:11:28
C/C++
bool b = std::cin.fail();
do
{
    std::cin >> a;
    std::cout << "Czy cos nawalilo? " << std::cin.fail();
} while( b = 1 );

b tylko raz otrzymuje wartość od fail(), więc albo pętla wykona się raz, albo nieskończenie wiele razy. (pomijając błąd w warunku)
P-129086
Yaoo
Temat założony przez niniejszego użytkownika
» 2015-03-24 20:13:14
Processing C++ source file...
--------
- C++ Compiler: C:\Program Files (x86)\Dev-Cpp\MinGW64\bin\g++.exe
- Command: g++.exe "C:\Users\PC\Desktop\Inne\C++ files\kod_4.cpp" -o "C:\Users\PC\Desktop\Inne\C++ files\kod_4.exe"  -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc

Compilation results...
--------
- Errors: 0
- Warnings: 0
- Output Filename: C:\Users\PC\Desktop\Inne\C++ files\kod_4.exe
- Output Size: 1,7675952911377 MiB
- Compilation Time: 1,22s

Przy kompilacji nie ma problemu, ale potem każda liczba, niezależnie od tego, czy jest ona poprawna czy nie, powoduje zakończenie programu na "Czy coś nawaliło?".
P-129087
Yaoo
Temat założony przez niniejszego użytkownika
» 2015-03-24 20:14:44
Pekfos, to jak mógłbym to poprawić?
P-129088
Brunon3
» 2015-03-24 20:15:10
Ta, wiedziałem że coś przeoczyłem.

Oprócz poprawy warunku (!), ustawiaj
b = std::cin.fail();
 za każdym razem jako ostatnią linijkę w pętli.

Oczywiście można to zrobić inaczej, ale nie ma co już mieszać.

W każdym razie powinno zadziałać.

-BD.
P-129089
pekfos
» 2015-03-24 20:20:33
ustawiaj
b = std::cin.fail();
 za każdym razem jako ostatnią linijkę w pętli.
Wtedy nie ma sensu trzymać tej zmiennej. Prościej fail() wstawić po prostu do warunku.

Output Size: 1,7675952911377 MiB
Te ułamki bitów..
P-129091
Yaoo
Temat założony przez niniejszego użytkownika
» 2015-03-24 20:21:05
C/C++
#include <iostream>

int wczytajLiczbe()
{
    int a;
    bool b;
    do
    {
        std::cin >> a;
        std::cout << "Czy cos nawalilo? " << std::cin.fail();
        b = std::cin.fail();
    } while( b == 1 );
   
    return a;
}

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

Kod idealny, a mimo to - nie wiem dlaczego - po wpisaniu błędnej liczby jako "a", program zaczyna wariować. Mozaika różnych liczb i cyfer się pojawia w oknie konsoli. Oczywiście jestem Wam bardzo wdzięczny za pomoc. Jeśli możecie to pomóżcie mi jeszcze z tym drobnym problemem :)
P-129092
« 1 » 2
  Strona 1 z 2 Następna strona