在scanf的%c前面加个空格就好了
改成这样就解决了scanf(" %c",&c);
具体错误解释是这样的:
因为回车键的ASC2字符是'\r' ,也就是0x0d,他相当于一个char型字符。
在scanf接收数据的时候,你输入的是:y(打个比方,一个字符),然后按下回车键
此时相当于你在键盘中输入的是俩个字符,'y’和'\r',这时如果你用%c接收,%c你应该很了解,是接收单个字符的,所以他会第一次接收'y’,第二次接收'\r',这也就是为什么连续输入字符%c前必须加上空格的道理,目的是防止前一个字符'\r'被下一个scanf误当做字符接收了。
当然,你如果用%s接收,他只会接收回车之前的字符串,%s特性,通过回车判断字符串输入结束。
如果用%d接收,他只识别数字,%f同样的道理。
举个例子你写个scanf("%s", &ch);scanf("%d", &ch);scanf("%f", &ch);然后什么数据都不输入,只按回车键,他是不会执行的,scanf下面的语句不会执行。就是我上面说的原因。
但是'\r'是一个字符,他当然会被%c接收,所以会造成误判。
这么解释总该明白吧。