#include
#include
void fun(){
char c;
scanf("%c",&c);
if(c=='y') printf("1");
else {printf("2"); fun();}
return;
}
int main(){
fun();
return 0;
}
如上代码,在输入一个非y的字符后为什么连续打印了两个2?
第一个2是因为输入的非y字符,输出第一个2后继续调用fun(),此时c会接受你之前键入的回车符‘\n’,因为‘\n’!=‘y’所以会输出第二个2.
楼上正解,这个时候为了解决这种情况可以在scanf语句后面增加一个getchar();语句,读取输入的换行、空格等结束符,这样就不会出你所说的问题了
楼上正解,你会读取从终端输入的回车键,当做一个字符去处理,加getchar却是可以避免问题,但你可以改改程序逻辑,避免这种情况的出现