为什么在传递一个引用时,在格式说明符后面加空格时scanf()会读取两个值 #包括 main() { INTA; printf(“输入值”); scanf(“%d”和“&a”); printf(“a=%d\n”,a); }

为什么在传递一个引用时,在格式说明符后面加空格时scanf()会读取两个值 #包括 main() { INTA; printf(“输入值”); scanf(“%d”和“&a”); printf(“a=%d\n”,a); },c,C,在scanf()函数中,我在格式说明符后面加了空格。当我运行这个程序时,scanf()从用户那里读取两个值,只有第一个值被分配给“a” 为什么在格式说明符之后使用空格时,即使在上述程序中传递了一个引用,scanf()仍要读取两个值 为什么在格式说明符之前使用空格时,即使传递一个引用,scanf()仍读取一个值 scanf()函数将如何工作 首先,您需要更改inta指向指针,2)当您将变量指定为int时,它只期望整数0-9,空格是char字符,3)我认为数字也会回答这个问题 scanf格式字符串中

scanf()
函数中,我在格式说明符后面加了空格。当我运行这个程序时,
scanf()
从用户那里读取两个值,只有第一个值被分配给“a”

  • 为什么在格式说明符之后使用空格时,即使在上述程序中传递了一个引用,
    scanf()
    仍要读取两个值

  • 为什么在格式说明符之前使用空格时,即使传递一个引用,
    scanf()
    仍读取一个值

  • scanf()
    函数将如何工作


  • 首先,您需要更改
    inta指向指针,2)当您将变量指定为
    int
    时,它只期望整数0-9,空格是
    char
    字符,3)我认为数字也会回答这个问题

    scanf格式字符串中的空格与任意数量的 输入中的空白

    要匹配任意数量的输入空间,它必须查看 用于终止空白的内容--即,除 空白(一个新行是空白,所以它是不够的)

    这就是为什么需要输入第二次(不应该是空格来终止
    scanf()


    空白包括空格、制表符或换行符

    希望我的回答能有所帮助

    除非您有意,否则请始终避免在scanf中使用空格或制表符!这在某些场景中是必需的

    为什么scanf会有这种行为

    scanf使用空格、换行符和制表符作为分隔符。当它从键盘上读到这3条信息时,它就会停止输入


    由于您在scanf中提供了空格,在输入整数后,它将等待换行符,空格将通过键盘输入以匹配您的空格,然后它将完成从键盘输入。

    这将帮助您-删除
    %d”
    之后的空格。格式说明符前面的一个空格清除输入缓冲区中的空白字符,但
    %d“
    格式无论如何都会这样做(与
    %c”
    格式不同)。@WeatherVane我认为应该是“格式说明符后面的一个空格…”@skrewill应该怎么做?具体点。我在前面和后面提到一个空格。你只写了半条评论。@WeatherVane抱歉!你在句子中说了“更正”以删除格式说明符后的空格,但在第二句中你写了“格式说明符前的空格…”。我认为应该是“格式说明符后面的空格…”。我是对还是错?我的英语不好,所以我可能理解错了。请更正。因为指针是用来在中存储值的地址的memory@jacky指针存储变量的地址或分配内存的地址,但不存储值的地址。在他的代码中使用指针和
    int
    又有什么区别呢?
    #include<stdio.h>
    main()
    {
        int a;
        printf("Enter a value \n");
        scanf("%d ",&a);
        printf("a=%d \n",a);
    }