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

C++中用于存储行星名称的char变量无法正常工作的原因排查

代码运行失败的核心问题
  • 变量类型选型错误:planets被定义为char类型,该类型仅能存储单个ASCII字符,完全无法承载“Mercury”这类多字母的行星名称;就算强制读取输入,也只会截取输入内容的第一个字符存入变量,后续内容全部丢失。
  • 比较逻辑存在语法错误:代码中所有判断分支里的Mercury/Venus/Mars等名称,既没有提前定义为常量,也没有加双引号标识为字符串字面量。C++编译器会把这类词当成未定义的自定义变量处理,直接触发编译报错,根本不会自动将其匹配为对应的行星名称文本。
  • 依赖头文件缺失:现有代码没有引入必需的头文件,若脱离IDE的自动补全环境,std::cin、std::cout、字符串类型等核心功能都无法正常编译。你之前改成数字就能正常运行,本质是因为数字常量不需要加引号、int类型可以正常存储单值数字,和字符串场景的语法规则差异较大,不能直接照搬写法。
实现输入行星名即可运行的修改方案
  • 将存储行星名的变量类型从char修改为std::string,同步引入<string>头文件,保证变量有足够的内存空间存储完整的行星名称。
  • 所有和行星名做匹配的判断分支,把裸写的行星名称加上双引号,改成合法的字符串字面量,比如将planets == Mercury调整为planets == "Mercury",完成正确的文本匹配。
  • 补充<iostream>头文件,保证输入输出功能可正常调用。
  • 修正最终输出语句的拼写错误,避免输出无意义的乱码文本。
可正常运行的核心代码参考
// 补全所有必需头文件
#include <iostream>
#include <string>

int main() {
  double weight;
  // 使用字符串类型存储用户输入的行星名
  std::string planets;

  std::cout << "Please enter your current earth weight: ";
  std::cin >> weight;

  std::cout << "Which planet would you like to go?\n";
  std::cout << "Mercury,Venus,Mars,Jupiter,Saturn,Uranus,Neptune \n";
  std::cout << "Which planet are you visiting? \n";
  std::cin >> planets;

  // 所有匹配判断使用带双引号的字符串字面量
  if (planets == "Mercury") {
    weight = weight * 0.38;
  } else if (planets == "Venus") {
    weight = weight * 0.91;
  } else if (planets == "Mars") {
    weight = weight * 0.38;
  } else if (planets == "Jupiter") {
    weight = weight * 2.34;
  } else if (planets == "Saturn") {
    weight = weight * 1.06;
  } else if (planets == "Uranus") {
    weight = weight * 0.92;
  } else if (planets == "Neptune") {
    weight = weight * 1.19;
  }

  std::cout << "Your weight on this planet is " << weight << "\n";
}

内容的提问来源于stack exchange,提问作者Alaris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 14:54:04