C语言代码无编译报错但输出结果错误,是哪里遗漏了代码逻辑?
问题排查与解决方案
1. 你去掉scanf中&的操作是错误的
对于char类型的普通变量,使用%c格式符读取时,scanf需要拿到变量的内存地址才能修改其存储的值,因此必须加上&取地址符。你去掉&的操作属于未定义行为,即便没有触发编译报错,运行结果也必然不符合预期,首先需要把&加回对应的scanf语句中。
2. 输出不符合预期的核心原因是输入缓冲区的空白字符残留
前序输入操作结束后按下的回车、输入过程中多余的空格,都会残留在输入缓冲区中。%c格式符默认会读取所有字符,包括空白字符,因此后续执行scanf("%c")时,会直接把缓冲区中残留的换行符、空格赋值给ms、sc变量,你的后续逻辑判断自然无法命中预期分支。
修复方法
最简单的处理方案是在%c格式符前加一个空格,修改你的输入语句为:
scanf(" %c", &ms); scanf(" %c", &sc);
格式串开头的空格会自动匹配并丢弃输入缓冲区中所有连续的空白字符,确保读取到的是用户实际输入的有效字符。
内容的提问来源于stack exchange,提问作者Darshika Jadhav
相关产品推荐
相关产品推荐

