“如何”";规范适用于scanf()?

“如何”";规范适用于scanf()?,c,scanf,C,Scanf,我有以下代码 char c; scanf("%c",&c); 现在我已经读到“%c”将使用包括ENTER在内的空格。但是为什么当我按下ENTER(在按下任何字符之前)%c不接受它呢 那么,为什么它会在按下任何字符之前接受缓冲区中存在的ENTER键,而不接受ENTER键呢?我想你的问题是为什么一些输入,包括ENTER,没有传递给scanf()。 它不是关于%c或%d或任何其他类型。 你看,像Esc这样的特殊字符不是IO函数的密码。但是,它们可以被识别,例如,在执行代码时打开的控制台。\i

我有以下代码

char c;
scanf("%c",&c);
现在我已经读到“%c”将使用包括
ENTER
在内的空格。但是为什么当我按下
ENTER
(在按下任何字符之前)
%c
不接受它呢


那么,为什么它会在按下任何字符之前接受缓冲区中存在的
ENTER
键,而不接受
ENTER
键呢?

我想你的问题是为什么一些输入,包括
ENTER
,没有传递给scanf()。 它不是关于%c或%d或任何其他类型。 你看,像
Esc
这样的特殊字符不是IO函数的密码。但是,它们可以被识别,例如,在执行代码时打开的控制台。

\include
#include<stdio.h>
int main()
{
    char ch;
    scanf("%c",&ch);
    printf("%d",ch);
    return 0;
}
int main() { char ch; scanf(“%c”和“ch”); printf(“%d”,ch); 返回0; }
上述程序的输出为:-(当按下第一个键进入时)

10

上面的程序生成了10,因为'\n'的ASCII码是10


*所以对我来说,它甚至把新行字符作为第一个输入*

因为这是它的观点问题也不是很清楚。请发布一个可编译的代码示例和一个导致意外结果的输入序列。您发布的代码,以及输入的
\n
,正确地将
'\n'
分配给
c
(假设
scanf
没有失败)。“当我按ENTER键时(在按任何字符之前)%c不接受它?”是的。显示更多代码,演示您认为不是的原因。实际上,当在控制台中按enter键时,一个换行符被发送到标准输入,并且
scanf
与任何其他字符一样获得它。那么为什么您在字符和c中看不到“\n”或当前环境或操作系统的任何换行符呢?如果是,我可以道歉。