字符输入中,赋值顺序和缓存的联系
scanf是从标准输入缓冲区中读取输入的数据,如果连续输入两个%c格式的字符,而中间又要涉及回车,那么第二个字符将被赋予回车。
解决办法:
1、清空输入缓冲区
第一个scanf后加入语句:fflush(stdin); //C语言清空输入缓冲区函数
2、格式控制中加入空格
将第二个scanf改为:scanf(" %c",&ch2);//在%号前面加一个空格
scanf格式输入时要求输入格式与格式控制符中的完全一样(如:scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e)空格可以抵消前面输入的回车符。
3、直接用ch=getche()吸收回车
4、当输入完整数或字符时,后面还需要输入字符时,为了避免输入的字符变成回车符,可以在输入字符前多加一条scanf语句来吃掉前面的回车符。此时用来吃掉回车符的scanf输入可以用%c方式,也可以用%d方式。当用%c方式来吃掉回车符时,回车符被读进了char类型变量中,当用%d方式来吃掉回车符时,回车符并没有被送进int类型变量中,而是在异常的字符输入后,被自动清除了。
原文地址:http://blog.csdn.net/u012860063/article/details/38071077