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

Program przerywa działanie bez wskazania błędu - Język C

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
296 wizyt
pytanie zadane 26 sierpnia 2015 w C i C++ przez Int_main Bywalec (2,850 p.)
Witam!
Mam następujący problem. Piszę sobie program, który wykona konwersje pomiędzy systemem dziesiętnym i szesnastkowym (z zamiarem poszerzania o kolejne systemy). Piszę w języku C, kompiluję w środowisku C za pomocą Dev C++. Problem polega na tym, że nie wykonuje się 84. linia programu. Chciałbym, aby po wykonaniu konwersji można było wrócić do menu - ma wykonać to funkcja, która przywróci menu (wiem, że nie ma to głębszego sensu, bo operacja wykona się raz, ale skoro jest to dla mnie zagadką, chcę to rozwiazać), napisałem zatem funkcję, która ma przywrócić menu, ale zamiast pobrać znak (linia 84.) program przerywa działanie i nie czyta dalszej instrukcji. Kto spotkał się z podobnym problemem prosze o radę.
Kod wklejam do Pastebina:
http://pastebin.com/4A0aEhPX

3 odpowiedzi

+1 głos
odpowiedź 26 sierpnia 2015 przez mrcnsct Nałogowiec (36,390 p.)
wybrane 26 sierpnia 2015 przez Int_main
 
Najlepsza

Coś zostaje w buforze. Trzeba go wyczyścić np. tak 

while(getc(stdin)!='\n');

Wklej to na początku funkcji powrot_menu. Możesz też w scanf dać na początku spację, to scanf nie będzie wczytywał pustych znaków. 

scanf(" %c", &wybor2);

 

komentarz 26 sierpnia 2015 przez Int_main Bywalec (2,850 p.)
Wielkie dzięki za pomoc.
+2 głosów
odpowiedź 26 sierpnia 2015 przez krecik1334 Maniak (58,390 p.)
Może spróbuj zamiast używać do pobierania znaków scanf() użyć getchar() lub getchar_unlocked().
komentarz 26 sierpnia 2015 przez Int_main Bywalec (2,850 p.)
Ale getchar nie pobierze znaku dla wskazanej zmiennej, a getchar_unlocked() to chyba funkcja dla C++.
Poza tym scanf musi zadziałać, pytanie tylko dlaczego w tym przypadku nie działa. Mimo wszystko dzięki za odpowiedź.
komentarz 26 sierpnia 2015 przez krecik1334 Maniak (58,390 p.)

Jak getchar nie pobierze znaku dla wskazanej zmiennej, to do czego? Przykładowo

register char a = getchar();

 

komentarz 26 sierpnia 2015 przez Int_main Bywalec (2,850 p.)
Przyznam szczerze, że getchar() zawsze był dla mnie pewną zagadką, bo wiedziałem, że czyści bufor i pobiera zmienną, ale nie wiedziałem gdzie się ona zapisuje.
+1 głos
odpowiedź 26 sierpnia 2015 przez BoomSoft Początkujący (280 p.)
Generalnie to gdybyś nie znał pętli to jeszcze bym jakoś zrozumiał, ale skoro sam używasz tam while to znane Ci są te pojęcia. Dawno nie widziałem równie pokręconego pomysłu na architekturę programu ;) Powinieneś jak najszybciej pozbyć się tej funkcji powrot_menu czy jakoś tak i zapętlić funkcję wybór np. w programie głównym. I zapamiętać : CHCĘ ZROBIĆ COŚ WIĘCEJ NIŻ RAZ -> PĘTLA
komentarz 26 sierpnia 2015 przez Int_main Bywalec (2,850 p.)
Napisałem wyżej w opisie problemu, że jestem świadom tego, że taka architekrtua jest bezsensowna, bo powrót_menu i tak wykona się raz, ale zdecydowałem, że dokończę tym sposobem wyłącznie po to, by zmierzyć się z zaistniałym problemem. W nowym oknie już mam wersję z while. ;)

Podobne pytania

0 głosów
1 odpowiedź 1,443 wizyt
pytanie zadane 16 listopada 2021 w C i C++ przez Ign Nowicjusz (120 p.)
+1 głos
1 odpowiedź 337 wizyt
pytanie zadane 4 czerwca 2018 w PHP przez Maciej3206 Użytkownik (570 p.)
0 głosów
0 odpowiedzi 1,223 wizyt

93,440 zapytań

142,431 odpowiedzi

322,678 komentarzy

62,802 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

...