Моят C код не отговаря след оператор scanf

Написах набор от кодове, които сканират стойности и ги използват, за да тестват централната гранична теорема. Въпреки това, когато стартирам програмата си, след като въведа всички стойности с помощта на scanf, програмата ми не продължава към следващите редове код: проблемът изглежда така:

printf("*** DEMONSTRATION OF CENTRAL LIMIT THEOREM ***");
printf("Enter parameters for the distribution [a b]    ==> ");
scanf("%f %f",&a,&b);
printf("Enter distribution to display [1=data, 2=mean] ==> ");
scanf("%d",&option);
printf("Enter number in each group                     ==> ");
scanf("%d",&group);
printf("Enter number of samples of groups              ==> ");
scanf("%f",&times);
printf("are we here yet");

след тези printf и scanf програмата започва да прави изчисленията. Но когато стартирам програмата, след като компилирам (успешно). Изглежда кодът ми е заседнал след scanf("%f",×);

редът "тук ли сме вече" никога не се отпечатва, което означава, че програмата не е преминала през scanf. Не съм правил много C програмиране, това ми се стори наистина странно, може ли някой да разбере защо програмата не изпълнява след реда scanf("%f",×); Наистина го харесвам


person nanobots    schedule 19.02.2014    source източник
comment
Какво се случва след обаждането printf()? Сигурни ли сте, че това не е само защото не включвате '\n' в края му или не извършвате повикване до fflush(stdout)?   -  person Crowman    schedule 19.02.2014
comment
след printf() имам оператор if, който проверява входната стойност на опцията, ако опцията е 1, тя преминава през поредица от алгоритми, опитвайки се да покажа теоремата за централната граница чрез чисти данни, ако опция==2 тя показва централно гранична теорема чрез средна стойност на данните. Но проблемът е, че след scanf нищо не се показва   -  person nanobots    schedule 19.02.2014
comment
когато стартирам програмата, става нещо подобно Въведете параметри за разпределението [a b] ==› 0.2 0.7 Въведете разпределение за показване [1=данни, 2=средно] ==› 2 Въведете число във всяка група ==› 10 Въведете брой проби от групи ==› 100   -  person nanobots    schedule 19.02.2014
comment
Опитайте да смените на printf("are we here yet\n");. Ако това не работи, публикувайте целия си код или най-малката му версия, която можете да направите, която ще покаже това поведение.   -  person Crowman    schedule 19.02.2014
comment
да, прав си, след като добавих \n, той отпечатва следващия ред тук ли сме още, така че проблемът не е в scanf, а нещо друго в моя код, което причинява проблема   -  person nanobots    schedule 19.02.2014
comment
благодаря, сега мога да стесня грешката си. много благодаря   -  person nanobots    schedule 19.02.2014
comment
OP, като обща препоръка, дебъгерите са много по-надеждни и информативни от printf. Препоръчвам да се научите да използвате дебъгера, с който идва вашата IDE. Ако не използвате IDE, тогава все още има самостоятелни дебъгери (като gdb) и наистина трябва да обмислите използването на добра IDE, ако можете.   -  person Nicu Stiurca    schedule 19.02.2014
comment
някакви добри препоръки? Обикновено използвам C++ и java .net, но нямам много опит с C дебъгер.   -  person nanobots    schedule 19.02.2014
comment
times int ли е? Имате scanf("%f", &times);, което очаква указател към float.   -  person Joseph Quinsey    schedule 19.02.2014
comment
не, това не е проблемът, оказа се добре, мисля, че е нещо общо с моите алгоритми, които използвах   -  person nanobots    schedule 19.02.2014


Отговори (1)


Входът/изходът на терминала е буфериран в редове в C и изходът няма да се покаже, докато не изведете знак за нов ред или не извикате fflush(stdout), или програмата ви приключи нормално и всички буфери така или иначе се изчистят. промяна:

printf("are we here yet");

to:

printf("are we here yet\n");

or:

printf("are we here yet");
fflush(stdout);

и трябва да видите резултата си.

person Crowman    schedule 19.02.2014
comment
благодаря, след като го използвах, разбрах, че scanf не причинява проблема. тъй като редът след този scanf се отпечата. Това е нещо друго в моя код --algorithm part grrrr Ще опитам да го поправя сега - person nanobots; 19.02.2014