【问题标题】:My C code is not responding after scanf statement我的 C 代码在 scanf 语句后没有响应
【发布时间】:2014-03-19 05:03:36
【问题描述】:

我编写了一组代码,用于扫描值并使用它们来测试中心极限定理。但是,当我在使用 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);我真的很喜欢它

【问题讨论】:

  • printf() 通话后会发生什么?你确定这不仅仅是因为你没有在它的末尾添加'\n',或者打电话给fflush(stdout)吗?
  • 在 printf() 之后我有一个 if 语句检查 option 的输入值,如果 option 为 1,它会通过一系列算法尝试通过纯数据显示中心极限定理,如果 option==2 它通过数据的平均值显示中心极限定理。但问题是在 scanf 之后什么都没有显示
  • 当我运行程序时,它会变成这样 输入分布参数 [ab] ==> 0.2 0.7 输入分布以显示 [1=data, 2=mean] ==> 2 输入数字在每组中 ==> 10 输入组的样本数 ==> 100
  • 尝试更改为printf("are we here yet\n");。如果这不起作用,请发布您的整个代码,或您可以制作的最小版本,以显示此行为。
  • 是的,在我添加 \n 之后,它会打印出下一行我们是否在这里,所以不是 scanf 的问题,而是我的代码中的其他问题导致问题

标签: c scanf


【解决方案1】:

终端的输入/输出在 C 语言中是行缓冲的,并且在您输出换行符或调用fflush(stdout) 或您的程序正常终止并且所有缓冲区无论如何都被刷新之前不会显示输出。变化:

printf("are we here yet");

到:

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

或:

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

你应该会看到你的输出。

【讨论】:

  • 谢谢你我意识到scanf在使用后没有引起问题。因为 scanf 之后的行确实被打印了这是我的代码中的其他内容 --algorithm part grrrr 我现在要尝试修复它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2017-08-11
  • 2021-05-02
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多