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

时间:2018-10-01 08:19:38

标签: c scanf

我已阅读如下代码:

scanf("%s", str);
scanf(" ");

我猜代码的第二行只是在输入第一行的字符串时吞下最后一个\ n字符。但是我只是不明白这个论点是如何工作的。

1 个答案:

答案 0 :(得分:3)

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