【问题标题】:Why is this simple c scanf code causing infinite loop?为什么这个简单的 c scanf 代码会导致无限循环?
【发布时间】:2016-10-26 22:39:54
【问题描述】:

我的第一个堆栈溢出问题,让我们看看这进展如何!

我不明白为什么这段简单的 c 代码会导致无限循环。

#include <stdio.h>
#include <stdlib.h>

int main (void) {
  float num=0;
  printf("%f", num);
  scanf("%f", &num);
  printf("%f", num);
}

我检查了其他问题,但他们问的是为什么输入非法输入类型会导致无限循环。

我的代码在执行时会导致无限循环,这意味着它甚至在输入任何内容之前就进入了循环。

我是这样编译的:

gcc -o readSum readSum.c

终端输出:

vim readSum.c
15jz4@hera:~$ gcc -o readSum readSum.c
15jz4@hera:~$ ./readSum
0.000000

-按任意键后什么都没有发生 -Ctrl+Z 退出状态,但可能有其他键可以停止它。 -要重新安装,在那之前……我不能c+p。

编辑

哇...很快就得到了回复。

真的,伙计们,“整个代码”是怎么回事?为什么我不把我的整个代码?这是我的全部代码。或者我应该告诉你我在顶部有#include?​​p>

我创建这个只是为了测试 scanf。

这正是重点,由于某种原因,执行后它只是毫无逻辑地进入了无限循环!我试过 int main() { },以 return 0 结尾;如果没有scanf,它可以正常工作,就像我使用printf(...)之类的任何其他函数一样,但我不知道为什么在我执行它后立即什么都没有发生,我只能通过使用ctrl + z返回。和其他类似的代码对比,看不出原因。

不,它不是坐​​在那里等待输入。从字面上看,屏幕就像无限循环一样熄灭。

从 cmets 判断,逻辑上没有问题,它一定是在后台,比如缺少一些库资源(虽然我认为这不太可能)。

Nonononononono...为什么没有图片?这将对情况有很大帮助!

【问题讨论】:

  • 展示你的整个程序。你说的是循环,这里没有循环。
  • 1.不要那样编译它,像这样gcc -Wall -Werror -o readSum readSum.c。 2. 该程序的任何地方都没有循环。 3. 你的main()原型是错误的,但如果你按照我说的编译它你就会知道。
  • 如果在运行程序后按1 然后回车会发生什么?另外我建议你像Clara的例子一样添加printf行,然后你就会知道scanf是否通过了。
  • @TestBug 请回答问题:如果在运行程序后按 1 然后 Enter 会发生什么?
  • “没有用”是没用的。 什么不起作用?你按1,它没有出现在屏幕上?您是否在程序中添加了printf?您应该在scanf 之前和之后添加一个。是否打印其中任何一个?他们会无限打印吗? 没有我们坐在你旁边,如果你不告诉我们,我们就无法知道正在发生的事情。我开始认为你现在只是在拖钓。

标签: c compilation infinite-loop


【解决方案1】:

实际上工作正常。甚至添加了一个打印语句来检查。我认为您将输入数字与无限循环混淆了,因为没有循环开始。

#include <stdio.h>

main() {
    float num = 0;
    scanf("%f", &num);
    printf("%f\n", num);
}

试试看:https://ideone.com/RBDTYf

【讨论】:

  • 说代码有效并不是一个答案。它应该只是一个评论。当您获得足够的声誉时,您将能够评论其他人的问题。在此之前,您不应该滥用答案方法。
  • 知道了。谢谢。 :)
  • @Barmar 在这种情况下,说“你的代码中没有无限循环”是一个合理的答案 IMO,并提供一个 MCVE,因为 OP 拒绝
  • 这不是答案。显然这个问题是不完整的,上面的cmets正在试图让发布者澄清它。
  • 建议初始化num,以避免在scanf失败的情况下打印未初始化的值
猜你喜欢
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多