C++编写字符串逆序输出程序运行无输出,求问题原因及解决方法
问题原因
- 循环执行条件完全不成立:你将循环变量
i的初始值设为输入字符串的长度index,但循环判断条件写为i <= 0。只要输入的字符串非空,初始i值必然大于0,首次判断就不满足条件,循环全程不会执行,因此没有任何输出。 - 存在索引越界隐患:C++中
std::string的合法索引范围是0 ~ 长度-1,即便修改循环条件让循环运行,初始i = userInput.length()也会超出合法索引范围,调用at()方法时会抛出std::out_of_range异常。 - 原代码隐含有头文件缺失问题:使用
std::string需要引入<string>头文件,部分编译器会通过<iostream>间接引入该头文件不触发报错,但不符合C++标准规范。
修复方案
调整for循环的初始值、判断条件即可,修正后的完整代码如下:
#include <iostream> #include <string> using namespace std; int main() { int i; string userInput; int index; getline(cin, userInput); index = userInput.length(); // 从最后一个合法索引开始遍历,直到索引为0 for(i = index - 1; i >= 0; i--) { cout << userInput.at(i); } // 输出换行符让结果展示更规范 cout << endl; return 0; }
内容的提问来源于stack exchange,提问作者HarmlEss
相关产品推荐
相关产品推荐

