我读了如下代码:
scanf("%s", str);
scanf(" ");
我想代码的第二行只是在输入第一行的字符串时吞下最后一个字符。但我只是不明白这个论点是如何运作的。
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()
格式说明符会自动跳过前导空格。