小卢_TinyLu 2022-10-03 20:40 采纳率: 100%
浏览 33
已结题

scanf以不同于变量类型的格式描述符输入时,如何运作?

问题

scanf以不同于变量类型的格式描述符输入时,是怎么运作的?有个同学问了我这样的代码,一时间想不到原因。

代码

int main()
{
    int x;
    char y,z;
    scanf("%c%c%d",&x,&y,&z);
    
    printf("\tAscii\tchar\n");
    printf("x:\t%d\t%c\n",x,x);
    printf("y:\t%d\t%c\n",y,y);
    printf("z:\t%d\t%c\n",z,z);
    return 0;
}

输入

96 97 98

运行结果:

img

环境

Windows 10
MinGW GCC 11.2.0 64-bit Debug

  • 写回答

3条回答 默认 最新

  • X-道至简 2022-10-03 21:30
    关注

    (gdb) p &x
    $8 = (int *) 0x7fffffffe2bc
    (gdb) p &y
    $9 = 0x7fffffffe2bb ""
    (gdb) p &z
    $10 = 0x7fffffffe2ba "a"
    (gdb)

    x的地址是 0x7fffffffe2bc, y的地址是 0x7fffffffe2bb, z的地址是 0x7fffffffe2ba
    最后以%d给z赋值的时候覆盖了,x和y的值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月12日
  • 已采纳回答 10月4日
  • 创建了问题 10月3日