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
相关产品推荐
相关产品推荐

