how double scanf to eat the line

  1. 处理方法一
  2. 处理方法二

两个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!