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

时间:2013-03-15 23:06:33

标签: c scanf

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

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

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

我尝试搜索但找不到答案,即使是通过scanf的手册。

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

从我的Linux框中的man scanf开始:

  

指令是以下之一:

     

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

BTW,%d也是指令

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