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: #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 :/ |
|
Brunon3 |
» 2015-03-24 20:07:03 Daj } while( b == 1 ); . ---- Podaj pełny log kompilacji. Chyba reszta jest dobrze, może się mylę, bo to taka półminutowa analiza. -BD. |
|
pekfos |
» 2015-03-24 20:11:28 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) |
|
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?". |
|
Yaoo Temat założony przez niniejszego użytkownika |
» 2015-03-24 20:14:44 Pekfos, to jak mógłbym to poprawić? |
|
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. |
|
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.. |
|
Yaoo Temat założony przez niniejszego użytkownika |
» 2015-03-24 20:21:05 #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 :) |
|
« 1 » 2 |