如何解决C++程序重复打印Try Again及末尾额外输出0的问题
问题根因
- 重复打印Try Again的原因:你写的for循环会从1遍历到输入值y的所有整数,每轮循环都会做一次判断,只要当前i的立方不等于y就打印一次Try Again。比如输入8时,i从1到8共8轮循环,仅i=2时符合完全立方判断,剩下7次都会打印Try Again,才会出现多次提示的问题。
- 末尾多出0的原因:main函数中你调用了
cout << whatcube(y);,而whatcube函数的返回值是硬编码的int类型0,这行代码会把函数返回的0直接打印到输出末尾,所以多了个0。
修复后的代码
#include <iostream> using namespace std; // 改成void类型,不需要返回值 void whatcube(int y); int main(){ int y; cout << "Enter a perfect cube:"; cin >> y; // 直接调用函数即可,不用cout输出返回值 whatcube(y); return 0; } void whatcube(int y){ bool is_cube = false; int match_i = 0; // 不用遍历到y,遍历到立方大于y就可以停止,优化性能 for(int i=1; i*i*i <= y; i++){ if(i*i*i == y){ is_cube = true; match_i = i; // 找到匹配直接跳出循环,不用继续遍历 break; } } // 循环结束后只打印一次结果 if(is_cube){ cout << "This is a perfect cube! It's the cube of " << match_i << "." << endl; }else{ cout << "Try Again." << endl; } }
额外优化建议
- 如果要处理负数的完全立方判断,可以给输入的y取绝对值做判断,匹配后i的符号和y保持一致即可。
- 输入值很大的话,可以用
long long类型替代int,避免iii溢出int的取值范围导致判断错误。
内容的提问来源于stack exchange,提问作者Mona
相关产品推荐
相关产品推荐

