22

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

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

现在程序需要 2 个整数输入,并打印输入的第一个输入。那额外的东西应该\n带来什么不同?

我试图搜索但找不到答案,即使通过scanf.

4

2 回答 2

14

格式字符串中的'\n'- 或任何空白字符 - 会消耗输入中的整个(可能为空的)空白字符序列。因此,scanf当它遇到下一个非空白字符或输入流的结尾时(例如,当输入从文件重定向并到达其结尾时,或者在您使用 Ctrl-D 关闭标准输入之后)时,唯一的返回。

于 2013-03-15T23:10:00.743 回答
12

man scanf我的 Linux 机器中:

指令是以下之一:

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

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

所以你"%d\n"有两个指令,第一个读取数字,第二个......很好地读取任何数量的空白,包括你的行尾。您必须键入任何非空白字符才能使其停止。

于 2013-03-15T23:12:11.613 回答