c语言 - scanf( " " 是什么意思;双引号之间只有空格?



我读了如下代码:

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()格式说明符会自动跳过前导空格。

最新更新