scanf(“扫描”)是什么意思;双引号之间只有一个空格?

scanf(“扫描”)是什么意思;双引号之间只有一个空格?,c,scanf,C,Scanf,我读过如下代码: scanf("%s", str); scanf(" "); 我猜代码的第二行只是在输入第一行的字符串时吞下\n最后一个字符。但是我不明白这个参数是如何工作的。scanf(“”将使用尽可能多的空格,包括使用%s使用字符串后留下的换行符。但是,str的值不受此影响scanf(“%s”,str)将省略尾随的空格,无论您是否随后使用scanf(“”)使用该空格 因此,scanf(“”)本身是毫无意义的。如果您随后使用对空格敏感的读取,这可能是有意义的,如下所示: scanf("%s"

我读过如下代码:

scanf("%s", str);
scanf(" ");
我猜代码的第二行只是在输入第一行的字符串时吞下\n最后一个字符。但是我不明白这个参数是如何工作的。

scanf(“”将使用尽可能多的空格,包括使用
%s
使用字符串后留下的换行符。但是,
str
的值不受此影响
scanf(“%s”,str)
将省略尾随的空格,无论您是否随后使用
scanf(“”
)使用该空格

因此,
scanf(“”
)本身是毫无意义的。如果您随后使用对空格敏感的读取,这可能是有意义的,如下所示:

scanf("%s", str);
scanf(" ");
scanf("%c", c);
但是,你可以写下:

scanf("%s", str);
scanf(" %c", c); // Note the leading space.

这只适用于
%c
%n
%[
,以及像
fgets()
这样的未格式化输入函数。所有其他
scanf()
格式说明符都会自动跳过前导空格。

这可能是一个技巧,可以使用最多(包括)个空格为了能够在
scanf
之后使用
fgets
行尾。缺点是它会吃掉当前行后面的所有空行,这可能是预期的,也可能不是预期的…
scanf(“%s”,str)
是不明智的做法…str有多大?如果(何时)
scanf()
写入超过
str
结尾的内容?首选紧密绑定的内容。@user3386109但此处的目标是使用字符串后面而不是前面的空白字符。因此,在这种情况下,第二次扫描是否有效?