在Windows上,scanf()如何工作?
char c;
int i;
scanf("%d", &i);
scanf("%c", &c);
计算机跳过,因为“\ n”是在缓冲器剩余从控制台获取字符。 但是,我发现下面的代码运行良好。
char str[10];
int i;
scanf("%d", &i);
scanf("%s", str);
就像上面的例子中,“\ n”是留在缓冲区,但为什么scanf函数成功获取从控制台这次字符串?
在Windows上,scanf()如何工作?
char c;
int i;
scanf("%d", &i);
scanf("%c", &c);
计算机跳过,因为“\ n”是在缓冲器剩余从控制台获取字符。 但是,我发现下面的代码运行良好。
char str[10];
int i;
scanf("%d", &i);
scanf("%s", str);
就像上面的例子中,“\ n”是留在缓冲区,但为什么scanf函数成功获取从控制台这次字符串?
从GCC手册页(我没有Windows好用):
%C:字符固定数量的匹配,始终。最大字段宽度说明如何读取多个字符;如果不指定最大值,则默认值为1.它也不会跳过初始空白字符。
%s:匹配一串非空白字符。 它跳过并丢弃最初的 空格,但在阅读某些内容后遇到更多空白时停止。 [这个条款应该解释你所看到的行为。 ]
无法理解问题,但scanf忽略所有空白字符。 n
是一个空白字符。如果你想检测用户何时按下输入,你应该使用fgets。
fgets(str, 10, stdin);
sry for bad eng :(我认为我应该用'get'而不是'retrieve'这个词,我只是混淆了意思。 – Jaebum
这里需要多一点输入。你在控制台上输入什么内容?你想得到什么?没有理由说上述代码不能按预期工作,但这取决于预期的内容。 – Martin