gpt4 book ai didi

c - 当格式字符串末尾有换行符时,为什么 scanf 会要求两次输入?

转载 作者:太空狗 更新时间:2023-10-29 16:32:03 24 4
gpt4 key购买 nike

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

char *method1(void)
{
static char a[4];
scanf("%s\n", a);
return a;
}

int main(void)
{
char *h = method1();
printf("%s\n", h);
return 0;
}

当我运行上面的代码时,提示要求我输入两次(我在代码中只使用了一次scanf)。这是为什么?

(我输入了'jo';它要求更多输入,所以我再次输入'jo'。然后它只打印了一次'jo'。)

最佳答案

来 self 的 scanf 手册页

White space (such as blanks, tabs, or newlines) in the format string match any amount of white space, including none, in the input. Everything else matches only itself.

因此,使用 scanf ("%s\n", a) 它将扫描后跟可选空格的字符串。由于在第一个换行符之后可能会有更多的空格,所以 scanf 在第一个换行符之后没有完成并查看接下来的内容。您会注意到您可以输入任意数量的换行符(或制表符或空格)并且 scanf 仍将等待更多。

但是,当您输入第二个字符串时,空格序列被分隔并且扫描停止。

使用 scanf ("%s", a) 不扫描尾随空格。

关于c - 当格式字符串末尾有换行符时,为什么 scanf 会要求两次输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15740024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com