两个scanf相挨,若第二个scanf接受单个char类型,会错误赋值\n
Scanf(<阿猫阿狗接受什么都行>)
Scanf(“%c”, &char2)
经过调试,比如我输入a\nb
(此处\n
是Enter的回车),会发现第二个scanf(“%c”, &char2)
接受的是字符\n
,而非b
。因此判定,按下Enter会影响第二个scanf的输入,会使得第二个scanf是回车字符。
scanf、getchar、fgets等是接受标准输入(stdin)的函数,如果后面也有接受标准输入的函数,记得getchar
去吃掉那个字符。
处理方法一
因此,可以使用getchar()吃这个’\n’,但是不需要给其他变量赋值,因为这个’\n’本身没用。
Scanf(“%c”, &char1)
Getchar();
Scanf(“%c”, &char2)
处理方法二
另一个方法,是第二个scanf(" %c", &char2)
,注意" %c"
前面有个空格。
据我推测,这个方法利用了scanf接受数据并非严格格式化字符串输入的特性。
比如 scanf(“%d %d”, &a, &b)
, 输入1 2,1+2
,都可以正常通过scanf给a,b两个变量赋值,不一定要严格”1 2”以空格分隔。
scanf(" %c", &char2)
应该利用了scanf
不严格特性,来吃掉那个Enter。
Welcome to point out the mistakes and faults!