• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program nie wykonuje działań w CODE::BLOCKS

Object Storage Arubacloud
0 głosów
2,082 wizyt
pytanie zadane 3 listopada 2015 w C i C++ przez damiang Nowicjusz (160 p.)
edycja 3 listopada 2015 przez damiang

Mój problem polega na tym, że po wpisaniu pierwsze i drugiej liczby wyświetla się komunikat "Nie ma takiej opcji w menu". Używam Linuxa/Ubuntu.14.04.

PS. Przepraszam ale nastąpiła pomyłka, ten kod poniżej jest mój a ten wcześniejszy to był kod z tutorialu.

 

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <ncurses.h>
using namespace std;

float x,y;
char wybor;

int main()
{

for(;;)
{

    cout << "Podaj 1 liczbe: ";
    cin >> x;
    cout << "Podaj 2 liczbe: ";
    cin >> y;

    cout<<endl;
    cout << "MENU GLOWNE" << endl;
    cout << "-----------------" << endl;
    cout << "1. Dodawanie" << endl;
    cout << "2. Odejmowanie" << endl;
    cout << "3. Mnozenie" << endl;
    cout << "4. Dzielenie" << endl;
    cout << "5. Koniec programu" << endl;


    cout << endl;
    wybor=getch();

    switch(wybor)
    {
    case '1':
            cout<<"Suma = "<<x+y;
    break;

    case '2':
            cout<<"Roznica = "<<x-y;
    break;

    case '3':
            cout<<"Iloczyn = "<<x*y;
    break;

    case '4':
            if (y==0) cout << "Nie dzielimy przez zero!";
            else cout<<"Iloraz = "<<x/y;
    break;

    case '5':
            exit(0);
    break;

    default: cout<<"Nie ma takiej opcji w menu!";
    }
    getchar();getchar();
    system("clear");
}
    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)

Trochę poza tematem, ale...

Używam Linuxa/Ubuntu.14.04.

Skąd wziąłeś <conio.h>? Z tego co wiem on jest specyficzny dla Windowsa.

komentarz 3 listopada 2015 przez damiang Nowicjusz (160 p.)
Już poprawione:)
0 głosów
odpowiedź 3 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
U mnie też nie działa . To jest chyba wina funkcji getch()

bo po getch(); dałem cout
–1 głos
odpowiedź 3 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
Switch służy do porównywania liczb całkowitych, niczego poza tym.
komentarz 3 listopada 2015 przez niezalogowany
Ale to jak jest char to sobie zamienia na ASCII ;)
komentarz 3 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
OK, kod ASCII to liczba, ale on go w przykładzie nie używa, a słowo "liczba całkowita" nie oznacza tylko zmiennej typu int czy enuma.
komentarz 3 listopada 2015 przez damiang Nowicjusz (160 p.)
Czyli w jaki sposób mam zedytować kod?
komentarz 3 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
Po prostu użyj ifów, ale jeśli bardzo chcesz użyć tego switcha, to sprawdź kody tych znaków w tablicy ASCII.
komentarz 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)
Nic nie ruszaj, używanie switcha na charach w ten sposób jest jak najbardziej poprawne.
komentarz 3 listopada 2015 przez niezalogowany
No nie, nie używa, a przynajmniej jawnie, bo kompilator chyba sam sobie to przekonwertowuje do int-a (ASCII). No, na filmikach Pana Mirosława takie rozwiązanie działa http://youtube.com/watch?v=ib7LXBNfZ7g To jest ten odcinek, o ile się nie mylę.

A któż to ci dał łapkę w dół, chłopczyku? ;)
komentarz 3 listopada 2015 przez damiang Nowicjusz (160 p.)
Ten kod powyżej jest mój, tamten był z kursu. Mój błąd.
komentarz 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)

Ja dałem tej odpowiedzi, bo zdanie ani nie jest prawdziwe, ani nie ma związku z problemem.

bo kompilator chyba sam sobie to przekonwertowuje do int-a (ASCII)

Zgadza się. Zacytuję standard: 

character literal (...) has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set <tu: można założyć że chodzi o ASCII>.

komentarz 3 listopada 2015 przez damiang Nowicjusz (160 p.)
Czyli jak to ASCII mam podstawić?
komentarz 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)
edycja 3 listopada 2015 przez adrian17
Nic nie rób, ze switchem wszystko jest ok. Zgadzam się z tą drugą odpowiedzią, że prawdopodobnie chodzi o coś z działaniem getch().

Spróbuj cout'ować "wybor". (cout << (int)wybor;) Strzelam że wpadł tam znak entera (nowej linii).
komentarz 3 listopada 2015 przez niezalogowany
Też tak coś myślałem z tym enterem, ale kod jest (chyba) taki sam jak w kursie Pana Zet, więc nic o tym nie mówiłem.
komentarz 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)
Dobra, mój strzał że to z curses jest rzecz. On normalnie jest stworzony do pełnych interfejsów konsolowych i z tego co widzę powinno się go używać dopiero po wywołaniu initscr();. I faktycznie, wtedy łapanie inputu działa, ale z kolei przestaje działać poprawnie u mnie endl... coś, curses pewnie nie lubi gdy cokolwiek innego niż on próbuje pisać na ekran.

Sugestia moja: zignoruj getch(). To nie jest częścią standardu C++ i zawsze był bolesnym punktem zarówno na Windowsie jak i na Linuxie, a wszystko tylko dlatego że komuś się nie chce wcisnąć głupiego entera.
komentarz 3 listopada 2015 przez damiang Nowicjusz (160 p.)

To miejsce:

 

cout << endl;
    wybor=getch();

 

Ma wyglądać tak?

 


    cout << endl;
    wybor=getch();
    cout << (int)wybor;

 

komentarz 3 listopada 2015 przez adrian17 Ekspert (345,160 p.)
Tak; pewnie dostaniesz -1, jak ja. Patrz moja najnowsza odpowiedź wyżej.

Podobne pytania

0 głosów
2 odpowiedzi 2,153 wizyt
pytanie zadane 4 października 2015 w C i C++ przez WWOTEX Mądrala (6,200 p.)
0 głosów
1 odpowiedź 844 wizyt
0 głosów
2 odpowiedzi 329 wizyt

92,628 zapytań

141,491 odpowiedzi

319,861 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...