nj-*_*ath 0 c scanf undefined-behavior
当我遇到这个时,我正在经历一些程序.
#include<stdio.h>
void main()
{
char z;
do
{
printf("1st line\n");
printf("2nd line\n");
scanf("%c",&z);
switch(z)
{
case 'a':printf("this is case a\n");
break;
case 'b':printf("this is case b\n");
break;
case 'c':printf("Exit\n");
return;
break;
default:
printf("this is default\n");
break;
}
}while(1);
Run Code Online (Sandbox Code Playgroud)
}
我第一次给出输入,输出是正确的.但是在给出第一个输入并且第二次开始循环之后,根本不执行scanf语句.printf语句虽然执行,但也是默认情况.
第1行
第2行
b
这是情况b
第1行
第2行
这是默认
第1行
第2行
当您输入b第一个scanf电话时,您也按Enter键.当scanf("%c", &z)处理该输入,它留下的输入流中的换行字符.
第二组输出是由于scanf读取了后面的换行符b.因为\n它既不是a,也不是b,也不c是默认情况.
您可以通过修改scanf字符串来修复行为,使其更符合您的期望:
scanf(" %c", &z);
Run Code Online (Sandbox Code Playgroud)
注意之前的空格字符%c.这将导致scanf在处理输入之前跳过空白字符(包括换行符).