代码之家  ›  专栏  ›  技术社区  ›  Ankit Sachan

scanf的反常行为

  •  0
  • Ankit Sachan  · 技术社区  · 16 年前

    想知道所有关于C的事情,你能解开这个谜团吗

    我有这个密码

    scanf(“%d , %d”,&a,&b);
    printf(“%d,%d”,a,b);
    scanf(”%c”,&c);
    printf(“%d,%d”,a,b);
    

    然后scanf不扫描c的值

    输出为:1,2

    如果我用这个

    scanf(“%d , %d”,&a,&b);
    printf(“%d,%d”,a,b);
    scanf(”%c ”,&c);//note a blank after %c
    printf(“%d,%d”,a,b);
    

    scanf(“%d , %d”,&a,&b);
    printf(“%d,%d”,a,b);
    scanf(”%1s”,&c);
    printf(“%d,%d”,a,b);
    

    在该段中,将显示a值,但b值将设置为0

    输出为1,21,0

    我还没有得到答案。帮我。。。。。。。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    您如何知道没有扫描任何字符 c

    请仔细阅读手册页,了解%c说明符的行为:


    匹配宽度计数字符序列(默认为1);下一个 指针必须是指向char的指针,并且必须有足够的空间 照常 前导空白的跳过被抑制。 跳过空白

    如果您输入的表单如下 1, 2 a 第一次扫描会吞噬整个系统 1 , 2 a 空间 . 不知道第二个例子是怎样的 将

    Anon. is on the money about the third case.

        2
  •  3
  •   Anon.    16 年前

    在上一个例子中,这与在内存中设置值的位置有关。

    scanf 将长度为1的字符串置于 c

    猜猜空终止符去哪里了?