我错误地在我的一个程序中使用scanf("%d\n",&val);
,我无法理解行为,功能显示。
int main(){
int val;
scanf("%d\n", &val);
printf("%d\n", val);
return 0;
}
现在程序需要2个整数输入,并打印输入的第一个输入。
额外\n
会带来什么不同?
我尝试搜索但找不到答案,即使是通过scanf
的手册。
答案 0 :(得分:8)
格式字符串中的'\n'
- 或任何空白字符 - 会在输入中使用整个(可能为空)空格字符序列。因此scanf
仅在遇到下一个非空白字符或输入流的结尾时返回(例如,当输入从文件重定向并到达其结尾时,或者在您使用Ctrl-关闭stdin之后) d)。
答案 1 :(得分:6)
从我的Linux框中的man scanf
开始:
指令是以下之一:
一系列空格字符(空格,制表符,换行符等;请参阅isspace(3))。该指令在输入中匹配任意数量的空格,包括无空格。
BTW,%d
也是指令。
所以你的"%d\n"
有两个指令,第一个读取数字,第二个读取...读取任何数量的空白区域,包括你的行尾。您必须键入任何非空格字符才能使其停止。