在C中的scanf()中使用“\ n”

我错误地使用了scanf("%d\n",&val); 在我的一个程序中,我无法理解行为,functionperformance出来。

 int main(){ int val; scanf("%d\n", &val); printf("%d\n", val); return 0; } 

现在程序需要2个整数input,并打印input的第一个input。 那额外的\n带来了什么区别?

我试图search,但无法find答案,即使通过手动scanf

格式string中的'\n'或任何空格字符在input中占用整个(可能为空)的空白字符序列。 所以scanf只在遇到下一个非空白字符或者inputstream结束时才会返回(例如,当input从文件中redirect到结束时,或者在用Ctrl-Dclosuresstdin之后)。

从我的Linux man scanf中的man scanf

指令是以下之一:

一系列空白字符(空格,制表符,换行符等;请参阅isspace(3))。 该指令匹配input中的任意数量的空白,包括无。

顺便说一句, %d也是一个指令

所以你的"%d\n"有两个指令,第一个指令读取数字,第二个指令读取任意数量的空白,包括行尾。 您必须input任何非空格字符才能停止。