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

Getch,który czeka dopóki nie wpiszę określonej liczby znaków

Object Storage Arubacloud
0 głosów
248 wizyt
pytanie zadane 22 lutego 2018 w C i C++ przez Ignacy Nowicjusz (160 p.)
edycja 22 lutego 2018 przez Ignacy

Chciałbym zrobić taki programik, który podaje liczbę dni danego miesiąca, ale podczas wpisywania numeru danego miesiąca chciałbym zamiast cin'a użyć getch'a. W przypadku lutego program pyta się o rok i na jego podstawie ustala czy jest on przestępny czy nie. Lecz jest pewien problem. Funkcja getch podaje rok od razu po wpisaniu pierwszej liczby roku. Np. kiedy chcę wpisać,że jest rok 2018 to getch wypisuje czy rok jest przestępny od razu po wpisaniu liczby 2. Czy istnieje możliwość zatrzymania getch'a do momentu wpisania 4 znaków? Załączam kod źródłowy.

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>

using namespace std;
int numer_miesiaca,rok,i;
int main()
{
    cout<<"Aby opuscic program wcisnij klawisz <0>"<<endl;
    Sleep(1000);
    system("cls");
    cout<<"Program rozpocznie sie za...";
    Sleep(1500);
    for(int i=5; i>=1;i--)
{

system("cls");
cout<<i;
Sleep(400);
}
system("cls");

for(;;)
{
system("cls");



    cout<<"Wpisz numer miesiaca"<<endl;
    numer_miesiaca=getch();



    switch(numer_miesiaca)
  {

    case '1':
    case '3':
    case '5':
    case '7':
    case '8':
    case '10':
    case '12':

     cout<<"Ten miesiac ma 31 dni";
    break;


    case '4':
    case '6':
    case '9':
    case '11':
    cout<<"Ten miesiac ma 30 dni";
       break;
    case '2':
        cout<<"Podaj rok"<<endl;
        rok=getch();
        if((rok%4==0)&&(rok%100!=0)||(rok%400==0))
            cout<<"Ten miesiac ma 29 dni";
        else cout
            <<"Ten miesiac ma 28 dni";
        Sleep(2000);
        break;

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





  }


}


    return 0;
}

 

komentarz 22 lutego 2018 przez Programeł Gaduła (3,500 p.)
Wklej cały kod bo kod ze screena to trochę za mało ;)
1
komentarz 22 lutego 2018 przez Ignacy Nowicjusz (160 p.)
już :)

1 odpowiedź

+1 głos
odpowiedź 22 lutego 2018 przez Programeł Gaduła (3,500 p.)

Funkcja getch(); odczytuje tylko po jednym znaku naraz, więc jeśli chcemy odczytać drugi znak znajdujący się w buforze, wywołujemy ponownie funkcję getch();.

Cpp0x: http://cpp0x.pl/kursy/Kurs-C++/Obsluga-klawiatury-za-pomoca-conio-h/320

A więc aby odczytać 4 znaki musisz dodać 4x getch(); 

Mam nadzieje że Cie nakierowałem ;) jak coś to pisz w komentarzu

 

komentarz 22 lutego 2018 przez Ignacy Nowicjusz (160 p.)
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>

using namespace std;
int numer_miesiaca,rok[4],i,rok_fin;
int main()
{
    cout<<"Aby opuscic program wcisnij klawisz <0>"<<endl;
    Sleep(1000);
    system("cls");
    cout<<"Program rozpocznie sie za...";
    Sleep(1500);
    for(int i=5; i>=1;i--)
{

system("cls");
cout<<i;
Sleep(400);
}
system("cls");

for(;;)
{
system("cls");



    cout<<"Wpisz numer miesiaca"<<endl;
    numer_miesiaca=getch();



    switch(numer_miesiaca)
  {

    case '1':
    case '3':
    case '5':
    case '7':
    case '8':
    case '10':
    case '12':

     cout<<"Ten miesiac ma 31 dni";
    break;


    case '4':
    case '6':
    case '9':
    case '11':
    cout<<"Ten miesiac ma 30 dni";
       break;
    case '2':
        cout<<"Podaj rok"<<endl;
        rok[0]=getch();
        rok[1]=getch();
        rok[2]=getch();
        rok[3]=getch();
        rok_fin=rok[0]*1000+100*rok[1]+10*rok[2]+rok[3]*1;




        if((rok_fin%4==0)&&(rok_fin%100!=0)||(rok_fin%400==0))
            cout<<"Ten miesiac ma 29 dni";
        else cout
            <<"Ten miesiac ma 28 dni";
        Sleep(2000);
        break;

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





  }


}


    return 0;
}

 

komentarz 22 lutego 2018 przez Ignacy Nowicjusz (160 p.)
Wykombinowałem coś takiego
komentarz 22 lutego 2018 przez Programeł Gaduła (3,500 p.)
edycja 22 lutego 2018 przez Programeł

Jeśli działa to dobrze ;)

i jeszcze jedna porada, lepiej zapisuj w ten sposób:

else cout<<"Ten miesiac ma 28 dni";

oraz 


using namespace std;

int numer_miesiaca;
int rok[4];
int rok_fin;          //lub int rok[4],rok_fin;

int main()

i po co jest ta zmienna? : 

int i;

 

1
komentarz 22 lutego 2018 przez Ignacy Nowicjusz (160 p.)

Ok zastosowałem się do rad. Zmienna i była mi potrzebna, bo pętla for coś mi początkowo działać nie chciała,ale usunąłem ją i wszystko działa. Aczkolwiek chcąc uatrakcyjnić program chciałem aby po każdym wpisaniu kolejnej cyfry roku pokazywała się ona na ekranie (cyfra). Udało się. Dziękuję za pomoc. FRAGMENT KODU PONIŻEJ

 case '2':
        cout<<"Podaj rok"<<endl;
        rok[0]=getch();
        cout<<rok[0];
        rok[1]=getch();
        cout<<rok[1];
        rok[2]=getch();
        cout<<rok[2];
        rok[3]=getch();
        cout<<rok[3]<<endl;
        rok_fin=rok[0]*1000+100*rok[1]+10*rok[2]+rok[3]*1;

 

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 8 marca 2018 w C i C++ przez Lucash Nowicjusz (240 p.)
0 głosów
1 odpowiedź 803 wizyt
pytanie zadane 13 sierpnia 2018 w C i C++ przez Ogleirduwa Nowicjusz (170 p.)
0 głosów
1 odpowiedź 1,065 wizyt
pytanie zadane 17 listopada 2019 w C i C++ przez rei656 Początkujący (290 p.)

92,583 zapytań

141,434 odpowiedzi

319,668 komentarzy

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

...