C++大小写转换代码仅含一个cin却持续要求输入的原因是什么
问题原因解析
核心死循环原因
你的代码进入了无限循环,并非持续要求输入,只是循环永远无法退出,没有执行到后续的输出步骤,看起来像卡住/等待输入,核心问题出在for循环的条件部分:
你写的循环语句为for (i=0;i=sentence.length();i++),此处第二个位置的循环条件使用了单等号=,是赋值操作,而非判断操作。
C++中赋值表达式的返回值为等号右侧的值,只要你输入的字符串非空,sentence.length()的结果就≥1,对应逻辑值为true,因此循环条件永远成立,程序会一直停在循环阶段。
其他代码逻辑错误
除了死循环问题外,你的代码还有多处逻辑错误,无法实现大小写转换功能:
- 遍历字符串的循环条件本身逻辑错误,正确的遍历条件应为
i < sentence.length(),即便你把赋值改成双等号判断i == sentence.length(),循环也不会执行。 - 大小写判断的对象错误:你判断的是下标变量
i,而非当前遍历到的字符sentence[i],下标不可能落在字母ASCII码区间内。 - 区间判断逻辑写反:
i<=65 && i>=90是永远无法成立的逻辑,没有数值可以同时满足小于等于65且大于等于90,大写字母的正确判断条件应为sentence[i] >=65 && sentence[i] <=90,小写字母判断同理应为sentence[i] >=97 && sentence[i] <=122。 - 赋值逻辑错误:你直接对整个
sentence字符串变量赋值,会直接把整个字符串覆盖为单个字符的ASCII值对应内容,正确写法是对字符串的单个下标位置赋值:sentence[i] = sentence[i] +32。
修正后可运行代码
#include <iostream> #include <string> using namespace std; int main() { string sentence = ""; cin >> sentence; int i; for (i=0;i<sentence.length();i++){ if (sentence[i] >=65 && sentence[i] <=90) { sentence[i] = sentence[i] + 32; } else if (sentence[i] >=97 && sentence[i] <=122){ sentence[i] = sentence[i] -32; } } cout << sentence; return 0; }
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

