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

petla do-while, powtarzajacy sie printf

VPS Starter Arubacloud
0 głosów
340 wizyt
pytanie zadane 14 marca 2020 w C i C++ przez Deny Nowicjusz (140 p.)
 do{
    scanf("%c",&wybor);
    if(!(wybor=='A' || wybor=='B'))
    {
        printf("Upsss.. tej opcji nie ma w menu, sprobuj jeszcze raz! ");
    }
    }while(!(wybor=='A' || wybor=='B'));

Czy mógłby ktoś mi pomoc z pewną rzecza? Otóż chodzi mi o to aby użytkownik podał prawidłową litere żeby przejść dalej, gdy zastosowałem taki kod to wtedy printf wyskakuje mi co najmniej 2 razy a gdy dam np. "asdasd" zamiast 'A' to wypisze mi w konsoli kilka dobrych razy printf a chciałbym żeby tylko raz wyskoczyla ta informacja i można było znowu wpisac jakąś litere 

1 odpowiedź

0 głosów
odpowiedź 14 marca 2020 przez Piotr Płatos Bywalec (2,380 p.)
Dzieje się tak dlatego ponieważ po kliknięciu klawisza enter sczytywane są dwa znaki do bufora: klawisz który kliknąłeś i enter.

Przykładowo klikasz znak 'x' na klawiaturze i zatwierdzasz enterem. Do bufora sczytane są znaki 'x' i znak entera. Ponieważ oba nie są równe 'A' ani 'B' to tekst wyświetla się dwa razy(po razie dla jednego i drugiego klawisza). Problem można rozwiązać np używając instrukcji getch()
komentarz 14 marca 2020 przez Deny Nowicjusz (140 p.)
Uzylem instrukcji getch(), wpisuje np. 'd' wyswietla raz komunikat, ale gdy probuje wpisac kolejna litere to komunikat znowu się powiela
komentarz 14 marca 2020 przez Piotr Płatos Bywalec (2,380 p.)
Będzie się pojawiać tyle razy ile razy podasz błędną literę, czy chciałbyś aby pojawił się maksymalnie raz? Bez względu na to ile razy podasz błędną literę?
komentarz 14 marca 2020 przez Deny Nowicjusz (140 p.)
Chciałym aby mniej więcej tak to wyglądało:

Podaje błędą literę wyskakuje komunikat i mam możliwość wpisania kolejnej litery jeżeli będzie błędna to chce aby komunikat pojawił się jeszcze raz załóżmy od nowej linii

Bo teraz wpisuje bledna litere i wyskakuje komunikat ale nie mam możliwości wpisania drugiej litery bo od razu po kliknieciu byle czego wyskakuje drugi raz komunikat
komentarz 14 marca 2020 przez Piotr Płatos Bywalec (2,380 p.)
Wystarczy dodać endl aby następny komunikat wyświetlił się w nowej linii. Teraz masz możliwość podania dobrej litery i też nie wyskoczy Ci komunikat. To już działa, spróbuj.
komentarz 14 marca 2020 przez Deny Nowicjusz (140 p.)
Nie rozumiemy się:D dla poprawnych liter wszystko działa, ale nadal są sczytywane 2 znaki bo klikam 'd' wypisuje printf i teraz powinna być możliwość wpisania kolejnej litery a takowej nie ma mimo ze kursor miga to po kliknieciu np. 'A' (A jest poprawne)lub nawet entera czy jakiego kolwiek znaku pojawia się znowu printf bez sprawdzenia czy dana litera jest poprawna
komentarz 14 marca 2020 przez Piotr Płatos Bywalec (2,380 p.)
Ja Cię rozumiem, tylko musiałeś coś źle napisać. U mnie wszystko działa nawet jeżeli najpierw podasz złą literę a później poprawisz to zadziała(wyjdzie z pętli i nie wypisze już komunikatu). Pokaż swój kod.
komentarz 14 marca 2020 przez Deny Nowicjusz (140 p.)
 do{
   scanf("%c",&wybor);
   if(!(wybor=='A' || wybor=='B'))
   {
       printf("Upsss.. tej opcji nie ma w menu, sprobuj jeszcze raz! \n");
        getch();
   }
   }while(!(wybor=='A' || wybor=='B'));

 

komentarz 14 marca 2020 przez Piotr Płatos Bywalec (2,380 p.)
Chodziło mi o wczytanie wartości do zmiennej za pomocą instrukcji getch()

np:

 

char zmienna;

zmienna=getch();
komentarz 14 marca 2020 przez Deny Nowicjusz (140 p.)

@Piotr Płatos,
 dzięki wielkie już działa poprawnie

Podobne pytania

0 głosów
1 odpowiedź 425 wizyt
pytanie zadane 3 sierpnia 2019 w C i C++ przez Garper Początkujący (360 p.)
0 głosów
1 odpowiedź 638 wizyt
pytanie zadane 6 stycznia 2019 w C i C++ przez Kacper Lasota Początkujący (250 p.)
0 głosów
1 odpowiedź 308 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...