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

pętla while i funkcja getchar()

Object Storage Arubacloud
0 głosów
230 wizyt
pytanie zadane 24 maja 2022 w C i C++ przez zibi100 Nowicjusz (120 p.)
Witam serdecznie po raz pierwszy wszystkich członków forum.

Napisałem mały program w 'C' , który prosi użytkownika o wpisanie literki 'y' lub 'n' w celu wejścia lub rezygnacji z wejścia. Na początku działa pętla 'while'. Gdy użytkownik 'wejdzie', ma za zadanie wpisanie liczby typu int. Gdy wpisze, liczba zostaje wyświetlona w konsoli. Wiadomo, że ten stan rzeczy dzieje się w kółko, dopóty, dopóki użytkownik nie wciśnie klawisza 'y' w celu wyjścia z programu.

Problem jest w tym, że pętla działa nieprawidłowo, bo pokazuje komunikat o wpisanej liczbie 2 razy, a powinna pokazywać 1 raz. Może należy użyć funkcji 'fflush(stdin)' w celu wyczyszczenie bufora ? Jeśli tak, to proszę o jakieś sugestie.

Z góry dziękuję za pomoc i pozdrawiam!

Oto kod programu:

/*

#include <stdio.h>
#include <float.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main() {
     char repeat;
     int number;

  while(repeat != 'y' || repeat != 'Y'){
  //fflush(stdout);
        puts("Welcome at our program!\n");
        printf("Enter 'y' or 'Y', if you want to finish the program\n"
        "otherwise, enter 'n' or 'N': ");
        repeat=getchar();

        if(repeat == 'n' || repeat == 'N'){
            printf("Enter some number without comma and dot: ");
            scanf("%d",&number);


        }else{
            break;
            printf("\n");
        }

}
printf("The number which you have entered is: %d\n", number);

return 0;
}



*/





 

komentarz 24 maja 2022 przez Oscar Nałogowiec (29,290 p.)

Na wejściu do pętli masz niezainicjowaną zmienną repeat. Tak ogólnie, jeśli pętla ma się wykonać co najmniej raz używa się zwykle do { ... } while ( ... );

 

komentarz 24 maja 2022 przez zibi100 Nowicjusz (120 p.)

@Oscar, 

Hej Oskar,

Rozwiązałem problem poprzez wpisanie tego:

scanf("%c%*c", &zmienna);

Był to wydaje mi się problem z buforem. Nie mniej jednak dziękuję za pomoc

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
2 odpowiedzi 257 wizyt
pytanie zadane 22 maja 2023 w C i C++ przez Igor4567 Nowicjusz (170 p.)
+1 głos
1 odpowiedź 898 wizyt
pytanie zadane 25 września 2022 w JavaScript przez Klaudiaaaa Początkujący (250 p.)
+1 głos
1 odpowiedź 163 wizyt
pytanie zadane 22 stycznia 2022 w PHP przez kubekszklany Gaduła (3,190 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...