You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:02