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

question-closed getchar() nie działa

Object Storage Arubacloud
+1 głos
409 wizyt
pytanie zadane 8 czerwca 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)
zamknięte 9 czerwca 2022 przez Noizz00

Witam, mam problem z poleceniem getchar(). Poniższy program działa, zastosowałem polecenie system("pause"):

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

int liczba, strzal, proba=1;

int main()
{
    cout << "Wylosowano liczbe z przedzialu od 1 do 100.";
    srand(time(NULL));
    liczba=rand()%100+1;
    cout <<endl<< liczba;
    while(strzal!=liczba)
    {
        cout << endl << "To twoja "<<proba<< ". proba"<<endl;
        cout << "Podaj, jaka to liczba: ";
        cin >> strzal;
        if(strzal>liczba)
        {
            cout << "To za duzo.";
            proba++;
        }
        else if(strzal<liczba)
        {
            cout << "To za malo.";
            proba++;
        }
        else if(strzal==liczba)
        {
            cout << "Wygrales! Poswieciles na to "<<proba<<" prob";
        }
    }

    system("pause");
    return 0;
}

natomiast używając biblioteki <stdio.h> i polecenia getchar() zamiast system("pause"), program nie czeka na kliknięcie dowolnego przycisku i od razu się wyłącza (zmiana biblioteki na <cstdio> nic nie daje). Dodam, że działam na Windows 10 Pro, ostatnio kombinowałem ze zmiennymi środowiskowymi we właściwościach systemu i modyfikowaniem zmiennej Path, ponieważ system miał problem ze znalezieniem libstc++-6.dll (nie mogłem odpalić pliku .exe, dopiero po tym zaczęło działać).

Normalnie bym nie pytał, bo i tak system("pause") robi to samo, ale dobrze byłoby wiedzieć, dlaczego coś, co miało działać (i widać to u pana Mirosława Zelenta: https://www.youtube.com/watch?v=QapjTCGV7GM), nie działa :P 

komentarz zamknięcia: Rozwiązano problem, brakowało instrukcji cin.ignore()
1
komentarz 9 czerwca 2022 przez VBService Ekspert (253,420 p.)

Spróbuj taki zapis

[ on-line ]

#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    int liczba, strzal, proba=0;
    
    cout << "Wylosowano liczbe z przedzialu od 1 do 100.\n";
    srand(time(NULL));
    liczba = rand()%100 + 1;
    cout << liczba;
    
    while (strzal != liczba)
    {
        cout << "\nTo twoja " << ++proba << " proba.\n";
        cout << "Podaj, jaka to liczba: ";
         cin >> strzal;
 
        if (strzal > liczba)
            cout << "To za duzo.";
        else if (strzal < liczba)
            cout << "To za malo.";
        else if (strzal == liczba)
            cout << "Wygrales! Poswieciles na to " << proba << " prob" << endl;
    }    
    
    cin.ignore();
    getchar();

    return 0;
}

 

1
komentarz 9 czerwca 2022 przez Noizz00 Użytkownik (910 p.)
Dzięki, brakowało cin.ignore(). Teraz działa. Temat zamykam :)

2 odpowiedzi

0 głosów
odpowiedź 9 czerwca 2022 przez jankustosz1 Nałogowiec (35,880 p.)
Jak np. wrzucisz kilka liczb w jednej linii po spacjach to możesz wiele razy wykonać cin'a. To co wpiszesz w konsoli trafia do bufora. Przy wywołaniu cin lub getchar pobierana jest liczba/znak z bufora, a jeżeli bufor jest pusty to dopiero wtedy następuje czekanie.

Najprawdopodobniej wpisujesz w konsoli coś więcej niż samą liczbę. Jest też możliwość, ze getchar pobiera znak nowej linii który pojawia się po liczbie. Możesz wypisać number znaku który pobrał getchar aby zobaczyć co sobie wział.
0 głosów
odpowiedź 9 czerwca 2022 przez Wiciorny Ekspert (270,190 p.)

Zwraca kod odczytanego znaku w przypadku sukcesu. Funkcja zwraca wartość » standard C ♦ EOF w przypadku napotkania błędu lub w przypadku osiągnięcia końca strumienia. W celu ustalenia rodzaju błędu jaki wystąpił należy użyć funkcji » standard C ♦ ferror lub » standard C ♦ feof.

Odczyt znaku : nie liczby. 
https://stackoverflow.com/questions/29484500/using-getchar-to-store-numbers 

Podobne pytania

+1 głos
1 odpowiedź 339 wizyt
pytanie zadane 4 listopada 2016 w C i C++ przez Beksio Początkujący (260 p.)
0 głosów
1 odpowiedź 1,615 wizyt
pytanie zadane 6 września 2019 w C i C++ przez milaa Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 1,522 wizyt
pytanie zadane 23 marca 2017 w C i C++ przez MsMaciek123 Pasjonat (24,760 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...