C语言字符类型和整形输入

代码

int a1,a2;
char c1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);

输入程序中,字符型后面要加空格吗,为什么?若要加,是否可以不加空格?

应该是必须不能加。写个代码运行一下看看结果就知道了。代码如下:

#include <stdio.h>
int main()
{
    int a1,a2;
    char c1,c2;
    scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
    printf("a1=%d\n",a1);
    printf("a2=%d\n",a2);
    printf("c1=%c\n",c1);
    printf("c2=%c\n",c2);
    return 0;
}

不加空格的情况:

img

加空格的情况:

img

img

原因:
%d后面跟%c的时候,%c会直接读取整数后面的字符,也就是在输入一个整数后,编译器会把不能分配给整数的字符分配给c1,举个例子,假如输入123a,那么a不是数字,所以不能分配给整数,整数部分是123,a分配给c1。所以如果在123后面加了空格,空格会被分配给c1,而a就会导致后面的%d读取错误。所以%d和%c之间没有空格的时候,输入的整数和字符之间也不能有空格

如有帮助,望采纳,谢谢。

img

要加,这样可以区分下一个参数

这样的写法,建议不加
如果是分开的scanf可以加,因为上面的写法容易造成错误——输入的空格被%c接收了等等。

希望对题主有所帮助,可以的话,帮忙点个采纳!

其实 你应该理解为什么要加
计算机对char,int,string的底层存储,char是一个字节的字符,int类型也有特点,在计算机底层占四个字节以及0~9的字符,而字符串就复杂了,长度未知,只有个起始位置。
那么,通过设置格式化获取到终端的多个数据,怎样设计才能像你这样一次输入多个数据,比如内部再有字符串呢?
所以,scanf格式化,即使像你上面这样写,一般也都默认是终端输入事,以空格或者回车区分多个数据,获取到特定的符合格式的数据。