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