• 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

Object Storage Arubacloud
+1 głos
181 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ź 787 wizyt
pytanie zadane 16 listopada 2021 w C i C++ przez Ign Nowicjusz (120 p.)
+1 głos
1 odpowiedź 178 wizyt
pytanie zadane 4 czerwca 2018 w PHP przez Maciej3206 Użytkownik (570 p.)
0 głosów
0 odpowiedzi 866 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...