分享
三行代码  ›  专栏  ›  技术社区  ›  bobbib

部分匹配后,scanf()忽略输入的其余部分?

  •  1
  • bobbib  · 技术社区  · 11 月前

    这是一种预期的行为吗? scanf() ,是否忽略部分匹配格式字符串后输入的其余部分?

    源代码:

    #include <stdio.h>
    
    int main()
    {
        int a=0, b=0;
        b = scanf("abc %d def", &a);
        printf("a=%d, b=%d\n", a, b);
        return 0;
    }
    

    输出(btw,我使用gcc 6):

    $ ./test_scanf01
    abc 123 def
    a=123, b=1
    $ ./test_scanf01
    fff 444 zzz
    a=0, b=0
    $ ./test_scanf01
    abc 333 rrrr
    a=333, b=1
    
    1 回复  |  直到 11 月前
        1
  •  4
  •   Some programmer dude    11 月前

    对, scanf 只要输入与格式匹配,就读取。一旦出现不匹配 斯坎夫 停止读取并将其余部分留在缓冲区中。

    例如,如果你有

    scanf("%d %d", &int_var_1, &int_var_2);
    

    输入是

    123 abc
    

    那么只有 "123 " 部分将被读取。书信 "abc" (和尾随的换行符)将留在输入缓冲区中,以便下次读取输入操作。