大家好,又见面了,我是全栈君。
字符输入中,赋值顺序和缓存的联系
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类型变量中。而是在异常的字符输入后,被自己主动清除了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115660.html原文链接:https://javaforall.cn