我错误地scanf("%d\n",&val);
在我的一个程序中使用,我无法理解行为,功能显示。
int main(){
int val;
scanf("%d\n", &val);
printf("%d\n", val);
return 0;
}
现在程序需要 2 个整数输入,并打印输入的第一个输入。那额外的东西应该\n
带来什么不同?
我试图搜索但找不到答案,即使通过scanf
.
格式字符串中的'\n'
- 或任何空白字符 - 会消耗输入中的整个(可能为空的)空白字符序列。因此,scanf
当它遇到下一个非空白字符或输入流的结尾时(例如,当输入从文件重定向并到达其结尾时,或者在您使用 Ctrl-D 关闭标准输入之后)时,唯一的返回。
在man scanf
我的 Linux 机器中:
指令是以下之一:
一系列空白字符(空格、制表符、换行符等;参见 isspace(3))。该指令匹配输入中任意数量的空白,包括无空白。
顺便说一句,%d
也是一个指令。
所以你"%d\n"
有两个指令,第一个读取数字,第二个......很好地读取任何数量的空白,包括你的行尾。您必须键入任何非空白字符才能使其停止。