首先,你要明白scanf是格式化输入,也就是说,你在scanf函数种,定义了客户端要以什么格式进行输入,如果你的输入格式和你定义的格式不一致,那么,方法不会报错,但是接受的数据,就和你预期的不一样。
明白一点,这个输入,是你按照你所指定的格式输入的。所以输入数据的时候,必须和你指定的格式一致。
如, scanf(“x=&d”,&a) 我这里定义了输入格式是x=?的方式
如果我在终端上输入的格式不是这个,那么输入就会错误,导致数据异常。
客户端必须按照 x=10的方式输入,数据才会准确的输入。哪怕一个空格不一致。都会导致输入数据不正确。
与数据类型的存储空间有关,char是字符型,只能存储一个字符的数据,即使你只写scanf("%c",&ch),从键盘仍输入123,再打印出来,ch=1,而不是123;
而int为整形,可接受的值为2^-16~2^16-1这么大的数
scanf()函数接受字符的时候只接受一位,所以ch=‘1’。
因为%c会接收一个字符1,后面%d读取碰到非数字结束。所有a的值是23
char型数据占一个字节,所以输入123时'1'被ch接收了,所以a得到后面的23