getchar的输出

Kun*_*nal 0 c

    int ch;
    do
    {
            ch = getchar();
            printf("ch = %d\n",ch);
    }while(ch != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输入1234的输出是

    ch = 49
    ch = 50
    ch = 51
    ch = 52
    ch = 10
Run Code Online (Sandbox Code Playgroud)

但就像这样给它

    char chs[100] = {0};
    unsigned int u = 0;
    int sign = 1,k=0;
    if(scanf("%[- 0-9]",&chs[0])== 1)
    {
             int ch;
             do
             {
              ch = getchar();
              printf("ch =  %d\n",ch);
             }while(ch != '\n' && ch != EOF);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输入= 1234的输出是

    ch =10
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?有人可以解释一下......为什么输出不像以前那样?

scanf如何在这里工作?

Mar*_*ers 6

调用scanf从流中读取数据.当您稍后尝试使用getchar已读取的字符再次从流中读取时,scanf不会再次读取.

另外,请参阅文档以scanf获取格式字符串的有效值.