为什么要用回车键终止scanf?

问题描述 投票:0回答:1

假设我有一个简单的 c 代码,要求我输入我的年龄,然后程序将打印出我的答案。当我运行该程序时,它会说“输入您的年龄:”,然后(使用 scanf)等待我输入一个数字,比如 40。我按键盘上的 4 和 0 键。但是我必须按下回车键才能让程序注册我所写的内容并终止 scanf。为什么我必须按回车?为什么不是空格键甚至是 shift 键?我以为 scanf("%d", &age);将消耗并存储所有数字,直到找到非数字,然后终止。但是,如果我写 40a 或 4 0 而不是 40,我仍然必须按 enter 键才能结束 scanf 函数并让程序继续。为什么?它只是一个定义,就像当你在谷歌上搜索某些东西时你必须在搜索字段中按回车键一样吗?我希望你明白我的意思!

如果我不得不猜测,我会说它与定义有关,但同样,我不知道。我读了另一个关于类似问题的答案,但我不明白一半。

c scanf
1个回答
1
投票

完全与程序无关。当您在终端上键入时,它可以运行两种模式:原始模式或熟化模式。在原始模式下,终端驱动程序将在键入字符时将字符发送到标准输入。在 cooked 模式下,它将等到看到回车,然后发送整行。熟模式还可以做其他事情,比如解释光标键和其他特殊字符。

默认情况下,您的终端处于熟模式。

这通常是一件好事。如果你输入

40
作为你的号码,然后意识到你犯了一个错误,应该输入
30
,在熟模式下,你可以按两次退格键并输入
30
,当你按返回键。在原始模式下,您必须自己处理退格键,您的程序将看到
30
.
    

© www.soinside.com 2019 - 2024. All rights reserved.