【发布时间】:2019-06-02 01:05:09
【问题描述】:
如阅读this answer:
num将始终包含一个整数,因为它是一个int。您的代码的真正问题是您没有检查scanf返回值。scanf返回成功读取的项目数,因此在这种情况下,它必须返回 1 作为有效值。如果不是,则输入了一个无效的整数值,并且num变量可能没有被更改(即仍然具有任意值,因为您没有对其进行初始化)。在您的评论中,您只想允许用户输入一个整数,然后输入回车键。不幸的是,这不能简单地通过
scanf("%d\n")实现,但这里有一个技巧:int num; char term; if(scanf("%d%c", &num, &term) != 2 || term != '\n') printf("failure\n"); else printf("valid integer followed by enter key");
我看到这篇文章运行良好,但它在 do-while 循环中不起作用。我需要从用户那里获取直到正确的输入,但是当首先执行循环时,它会不断打印失败而没有从用户那里获取。
有什么问题?
【问题讨论】:
-
在 do-while 循环中不起作用 - 那么不起作用的代码在哪里?如果您不发布,我们怎么知道您做错了什么?在 while 循环中使用它创建一个独立的、小型的、可构建的示例,并显示您遇到的特定问题,以及预期和当前的行为。
-
请添加您的代码,以便我们提供帮助
-
int myInt; scanf("%d", &myInt);应该只关心整数,但如果我记得那么你应该刷新输入缓冲区 -fflush函数也许,我不确定(否则输入键将在缓冲区中) -
请问您为什么坚持要出现换行符?以我的经验,终端输入在实际应用中很少见。它们只出现在交互式程序中,最有可能出现在 shell 和编辑器中。更常见的用例是从其标准输入读取的程序,该输入也可能是来自程序或文件的重定向数据。在这种情况下,输入可能会或可能不会被换行符终止;但这可能无关紧要。如果您确实在开发交互式程序,我建议您将用户交互与处理严格分开。
标签: c