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

błąd przy używaniu conio.h

Object Storage Arubacloud
0 głosów
135 wizyt
pytanie zadane 19 kwietnia w C i C++ przez TomJun Nowicjusz (160 p.)

Cześć! Od kilku dni tworzę aplikację w c++, która będzie służyć do takiego sentymentalnego zapisu momentów w życiu, gdzie również będą możliwości takie jak napisanie wiadomości do siebie z przyszłości. W każdym razie najistotniejszym jest to, że do obsługi menu aplikacji najczęściej wykorzystuję bibliotekę (conio.h) w na przykład ten sposób

char ch1;

cout<<"1. Opcja pierwsza"<<endl;

cout<<"2. Opcja druga"<<endl;

ch1 = getch();

if(ch1 == 49) //coś się dzieje

if(ch1 == 50) //coś się dzieje

itp.

i zawsze wszystko działało bez zarzutu, natomiast teraz w momencie kiedy chciałem tej funkcji użyć w taki sam sposób jak zwykle aplikacja się dziwnie zachowuje.

kod:

y:
system("cls");
    cout<<"PODANE DANE"<<endl;
    cout<<"_____________________________________________________"<<endl;
    cout<<"Status: "<<t1_qu1<<endl;
    cout<<"Kiss count: "<<t1_qu2<<endl;
    cout<<"Ilo\230\206 przyjaci\242\210: "<<t1_qu3<<endl;
    cout<<"Samoocena: "<<t1_qu4<<endl;
    cout<<"Stan konta: "<<t1_qu5<<endl;
    cout<<"Wzrost: "<<t1_qu6<<endl;
    cout<<"Waga: "<<t1_qu7<<endl;
    cout<<"Szcz\251\230cie: "<<t1_qu8<<endl;
    cout<<"Planowana data kolejnego statusu (DD/MM/YY): "<<NSday<<"."<<NSmonth<<"."<<NSyear<<endl;
    cout<<"_____________________________________________________"<<endl;
    cout<<"1. Dodaj status"<<endl;
    cout<<"2. Anuluj"<<endl;
    ch5=getch();
    if(ch5==49)
    {
z:
        system("cls");
        cout<<"Czy chcesz nada\206 statusowi nazw\251?"<<endl;
        cout<<"-"<<endl;
        cout<<"1. Tak"<<endl;
        cout<<"2. Nie"<<endl;
        cout<<"-"<<endl;
        ch7=getch();
        if(ch7 == 49)
        {
            system("cls");
            cout<<"-----------------------------------"<<endl;
            cout<<"Wpisz nazw\251: ";
            getline(cin, tamplateName);

        }
        if(ch7 == 50)
        {

        }
        else goto z;
    }
    if(ch5==50)
    {

    }
    if((ch5 != 49)&&(ch5 != 50)) goto y;

tutaj gdy aplikacja dojdzie do momentu odczytu części "czy chcesz nadać statusowi nazwę" to przy wyborze klawiszem "1" część "wpisz nazwę"  pojawia się i od razu wraca do momentu "czy chcesz nadać statusowi nazwę", natomiast gdy się kliknie klawisz "1" drugi raz, to część "wpisz nazwę" pojawia się z możliwością wpisania tak jak powinno być, ale po wpisaniu tylko zpowrotem wraca do momentu "czy chcesz nadać statusowi nazwę". 

Natomiast jeśli się kliknie "2" to pojawia się dziwny znak diamencika w konsoli a po drugim kliknięciu po prostu zaczyna się wpisywać liczba "2" na ekranie.

Nie mam pojęcia czym mogło by to być spowodowane, jeśli ktoś ma jakiś pomysł to z góry dziekuję!!

1
komentarz 19 kwietnia przez Velta Maniak (52,370 p.)

Jak potrzebujesz czegoś na już to jrnl.

1
komentarz 19 kwietnia przez overcq Pasjonat (21,730 p.)

@Tom­Jun, zamiast “goto” mógłbyś użyć pętli:

while(true)
{   system( "cls" );
    cout<<"PODANE DANE"<<endl;
    cout<<"_____________________________________________________"<<endl;
    cout<<"Status: "<<t1_qu1<<endl;
    cout<<"Kiss count: "<<t1_qu2<<endl;
    cout<<"Ilo\230\206 przyjaci\242\210: "<<t1_qu3<<endl;
    cout<<"Samoocena: "<<t1_qu4<<endl;
    cout<<"Stan konta: "<<t1_qu5<<endl;
    cout<<"Wzrost: "<<t1_qu6<<endl;
    cout<<"Waga: "<<t1_qu7<<endl;
    cout<<"Szcz\251\230cie: "<<t1_qu8<<endl;
    cout<<"Planowana data kolejnego statusu (DD/MM/YY): "<<NSday<<"."<<NSmonth<<"."<<NSyear<<endl;
    cout<<"_____________________________________________________"<<endl;
    cout<<"1. Dodaj status"<<endl;
    cout<<"2. Anuluj"<<endl;
    ch5 = getch();
    if( ch5 == '1' )
    {   while(true)
        {   system( "cls" );
            cout<<"Czy chcesz nada\206 statusowi nazw\251?"<<endl;
            cout<<"-"<<endl;
            cout<<"1. Tak"<<endl;
            cout<<"2. Nie"<<endl;
            cout<<"-"<<endl;
            ch7 = getch();
            if( ch7 == '1' )
            {   system( "cls" );
                cout<<"-----------------------------------"<<endl;
                cout<<"Wpisz nazw\251: ";
                getline( cin, tamplateName );

                break;
     
            }
            if( ch7 == '2' )
            {
                break;
            }
        }
        break;
    }
    if( ch5 == '2' )
    {
        break;
    }
}

 

komentarz 19 kwietnia przez TomJun Nowicjusz (160 p.)

Rozwiązanie do problemu powrotu aplikacji do punktu "z" to chyba rzeczywiście jak podała druga osoba zamienienie "if(ch7==50)", na else "if(ch7 == 50)" dzięki czemu potem komenda "else goto z;" nie zadziała przy kliknięciu '1', natomiast moim głównym problemem jest to, że jak w tym momencie działania aplikacji:

klikniemy '1', to wszystko jest okej i przenosi mnie do:

natomiast jak teraz kliknę '1', to dzieją się dziwne rzeczy mimo to że użyłem funkcji getch() tak jak wcześniej:

czy twój kod to rozwiązanie na ten problem?

komentarz 20 kwietnia przez TOWaD Mądrala (6,000 p.)
edycja 20 kwietnia przez TOWaD

Zawsze można użyć debagera do wyświetlenia wartości zmiennych.ł

Jak nie chciałem używać debbagera. więc wyrzucałem wartość  zmiennej na ekran.


else 
{cout<<(int) ch7<<endl;
goto z;}
//Lub może tak if((int)ch7 == 49)

 

 

1 odpowiedź

+1 głos
odpowiedź 19 kwietnia przez Great Stary wyjadacz (12,360 p.)

Gdy podasz 1 spełnia się warunek ch7 == 49. Następnie sprawdzany jest warunek ch7 == 50, który jest nieprawdziwy, więc wykonywany jest blok else z instrukcją skoku goto do etykiety z. Mógłbyś użyć else if:

        if(ch7 == '1')
        {
            system("cls");
            cout<<"-----------------------------------"<<endl;
            cout<<"Wpisz nazw\251: ";
            getline(cin, tamplateName);
 
        }
        else if(ch7 == '2')
        {
 
        }
        else goto z;

Obecny skrawek kodu nie wystarczy żeby znaleźć przyczynę drugiego problemu.

Podobne pytania

0 głosów
2 odpowiedzi 578 wizyt
pytanie zadane 6 maja 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
0 głosów
2 odpowiedzi 1,159 wizyt
pytanie zadane 31 lipca 2015 w C i C++ przez alfred Początkujący (270 p.)
0 głosów
0 odpowiedzi 1,048 wizyt
pytanie zadane 26 lipca 2019 w C i C++ przez niezalogowany

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 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!

...