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但此处的目标是使用字符串后面而不是前面的空白字符。因此,在这种情况下,第二次扫描是否有效?