radek04 Temat założony przez niniejszego użytkownika |
Niezrozumiałe działanie programu (typ bool) » 2014-05-20 13:43:44 Pisząc program, na różne sposoby próbowałem wyeliminować błąd przy wpisywaniu zmiennej (miało wczytywać tylko z zakresu SHORT). I przez przypadek zauważyłem, że dopisanie bool wpisz_cokolwiek; rozwiązuje problem. Tylko zupełnie nie rozumiem dlaczego. Pracuję w Code::Blocks 10.05 na win7 64bit. #include <iostream> #include <cstdlib> using namespace std; int main() { short ile; cout << "Ile chcesz gwiazdek (od 0 do 32767)? "; cin >> ile; bool wpisz_cokolwiek; while( ile > 0 ) { cout << "*"; ile = ile - 1; } while( ile < 0 ) { cout << "Zle wpisana wartosc. \nNagroda pocieszenia - 1 gwiazdka: \n"; ile = 1; cout << "*"; ile = ile - 1; } int OK; cout << "\nPolicz gwiazdki. \nZgadza sie ich ilosc? \n0. NIE\n1. TAK\nWybieram: "; cin.clear(); cin.sync(); cin >> OK; if( OK == 1 ) cout << "Brawo, umiesz liczyc!\n"; else if( OK == 0 ) cout << "Naucz sie liczyc!\n"; else if( OK > 1 ) cout << "Zle wpisana cyfra!\n"; cout << "KONIEC\n"; system( "pause" ); return 0; }
|
|
Monika90 |
» 2014-05-20 14:27:15 Nie sprawdzasz poprawności operacji wczytania liczby. Jeżeli cin.fail() zwraca true to znaczy, że się wczytanie nie udało. Spróbuj takiego kodu, powinien działać w nowoczesnych kompilatorach: #include <iostream> #include <limits>
int main() { short i; std::cin >> i; if( std::cin.fail() ) { if( i == 0 ) std::cout << "bad format\n"; else if( i == std::numeric_limits < short >::max() ) std::cout << "too big\n"; else if( i == std::numeric_limits < short >::min() ) std::cout << "too small\n"; else std::cout << "unknown error\n"; } else std::cout << "OK, i = " << i << '\n'; }
Code::Blocks 10.05 na win7 64bit. |
Wersja Code::Blocks jest mało interesująca, podaj wersję kompilatora. |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2014-05-20 14:58:17 GNU GCC Compiler. A jeśli jeszcze ma jakiś numer, to chyba nie umiem sprawdzić.
Dzięki za odpowiedź, ale zaczynam uczyć się programowania i po prostu chciałem wiedzieć skąd takie działanie programu po wpisaniu BOOL. Czy w innych (Waszych) kompilatorach takie działanie nie występuje? |
|
Monika90 |
» 2014-05-20 15:20:24 Jeżeli używasz starej wersji biblioteki iostream, w której operator >> zapisywał coś do zmiennej, tylko wtedy gdy wpisana przez użytkownika wartość była poprawna, to zmienna ile jest niezainicjalizowana. To znaczy są w niej jakieś śmieci. Próba użycia takiej zmiennej np. w warunku while powoduje Niezdefiniowane Zachowanie - czyli może stać się cokolowiek, np. coś dziwnego jak to, że dopisanie z pozoru nic nie znaczącej deklaracji zmienia zachowanie programu. A jeśli jeszcze ma jakiś numer, to chyba nie umiem sprawdzić. |
Taki kod wyświetli numer wersji: std::cout << __GNUC__ << '.' << __GNUC_MINOR__ << '.' << __GNUC_PATCHLEVEL__ << std::endl;
Poza tym, BOOL i bool to dwie różne nazwy. |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2014-05-20 18:46:22 wersja 4.4.1 |
|
MrPoxipol |
» 2014-05-20 18:52:00 |
|
radek04 Temat założony przez niniejszego użytkownika |
» 2014-05-20 19:53:15 Mam pewien problem z instalacją. Zrobiłem zgodnie z ww. instrukcją, ale nie kompiluje. Rozumiem, że muszę ręcznie jeszcze podać ścieżki do: c compiler c++ compiler linker... itp.?
Jeśli tak, to kolejny problem, bo w folderze bin jest wiele podobnych plików i nie wiem które powinienem wybrać. |
|
pekfos |
» 2014-05-20 19:54:02 gcc.exe, g++.exe, g++.exe, ar.exe, windres.exe. |
|
« 1 » 2 3 |