Мой код 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", & times);

строка «мы еще здесь?» никогда не печатается, что означает, что программа не прошла scanf. Я не очень много программировал на C, это показалось мне действительно странным, может ли кто-нибудь выяснить, почему программа не выходит за пределы строки scanf ("% f", & times); Я действительно это понимаю


person nanobots    schedule 19.02.2014    source источник
comment
Что происходит после звонка printf()? Вы уверены, что дело не только в том, что вы не добавляете '\n' в конце или не звоните в fflush(stdout)?   -  person Crowman    schedule 19.02.2014
comment
после printf () у меня есть оператор if, который проверяет входное значение option, если option равен 1, он проходит через серию алгоритмов, пытаясь отобразить центральную предельную теорему через чистые данные, если option == 2 он отображает центральную предельная теорема через среднее значение данных. Но проблема в том, что после сканирования ничего не отображается   -  person nanobots    schedule 19.02.2014
comment
когда я запускаю программу, она выглядит примерно так: Введите параметры для распределения [ab] == ›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 была напечатана Это что-то еще в моем коде - часть алгоритма grrrr Я собираюсь попробовать исправить это сейчас - person nanobots; 19.02.2014