空格字符在用scanf()在C中分配多个变量中的作用

空格字符在用scanf()在C中分配多个变量中的作用,c,input,output,scanf,C,Input,Output,Scanf,这是我的C代码 #include "stdio.h" int main() { int minx, x; printf("Enter two ints: "); scanf( "%d%d", &minx, &x); printf("You wrote: %d %d", minx, x); } 当我的输入是13时,我希望输出是13。 这不是scanf的工作原理吗,在%d%d中,它应该是两个没有空格的数字,这是我用13给出的,所以minx应该是1而x应

这是我的C代码

   #include "stdio.h"

int main()
{
  int minx, x;

  printf("Enter two ints: ");
  scanf( "%d%d", &minx, &x);

   printf("You wrote: %d %d", minx, x);
}
当我的输入是13时,我希望输出是13
这不是scanf的工作原理吗,在
%d%d
中,它应该是两个没有空格的数字,这是我用13给出的,所以minx应该是1x应该是3,但它不起作用。当我将输入从13更改为13时,它输出13。但是scanf是
%d%d
格式,而不是
%d%d
格式,那么为什么它在这里接受空格字符呢?当输入是13时,我希望输出是1,而不是13。空格字符在这里的作用是什么?它实际上起什么作用?

当您使用
scanf
%d
格式输入一个数字时,它将读取任意位数的整数。当您有连续字符时,
%d%d
它将读取任意位数的两个整数。这正是你所看到的

如果要为每个整数只读取一个单个数字,则必须指定
1
作为输入(字段)宽度!这将满足您的要求:

scanf("%1d%1d", &minx, &x);

scanf
格式说明符中,空格字符表示“跳过0个或更多空白字符”。
%d
表示“跳过零个或多个空格字符,然后转换为整数”。因此,在
scanf
格式说明符中,空格是可选的,因为大多数
%
-说明符(虽然不是全部)都会自己跳过空格。%d读取十进制格式的整数,而不是一位数字d%d需要两个数字,用空格或换行符分隔(否则它无法知道第一个数字何时结束)。如果确实要逐位读取,则需要使用%c一次读取1个字符,然后进行自己的转换。@实际上,只需为每个整数指定一个字段宽度(参见下文)就更容易了。如果是,则可以指定最大字段宽度=1。忘了那个功能。