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

Niezrozumiałe działanie programu (typ bool)

Ostatnio zmodyfikowano 2014-05-21 14:45
Autor Wiadomość
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.
C/C++
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    short ile;
    cout << "Ile chcesz gwiazdek (od 0 do 32767)? "; // do wartosci short (32676)
    cin >> ile;
   
    bool wpisz_cokolwiek; // dziwne, ale bez tego zle interpretuje litery
   
    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;
}
P-110459
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:
C/C++
#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.



P-110469
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?
P-110470
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:
C/C++
std::cout << __GNUC__ << '.' << __GNUC_MINOR__ << '.' << __GNUC_PATCHLEVEL__ << std::endl;

Poza tym, BOOL i bool to dwie różne nazwy.
P-110471
radek04
Temat założony przez niniejszego użytkownika
» 2014-05-20 18:46:22
wersja 4.4.1
P-110484
MrPoxipol
» 2014-05-20 18:52:00
Zainstaluj MinGW 4.8.1 http://sourceforge.net​/projects/mingwbuilds/files​/latest/download?source=files, a po instalacji przejdź do Settings->Compiler->Toolchain executables i ustaw poprawną ścieżkę (miejsce, gdzie zainstalowałeś MinGW).
P-110485
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ć.
P-110500
pekfos
» 2014-05-20 19:54:02
gcc.exe, g++.exe, g++.exe, ar.exe, windres.exe.
P-110501
« 1 » 2 3
  Strona 1 z 3 Następna strona