C++运行提示no operator << matches these operands错误如何解决
报错原因&修复方案
1 运算符不匹配报错直接诱因
你遇到的no operator << matches these operands报错,根因是所有cin读取语句后都错误拼接了endl:
endl是仅适用于输出流cout的操纵符,作用是输出换行并刷新输出缓冲区,输入流cin没有重载对应的>>运算符支持接收endl参数- 修复方案:删除所有
cin语句末尾的>> endl即可,用户输入时按回车键会自动分隔多个输入值,不需要额外加换行标识
2 隐藏的逻辑错误
就算解决了编译报错,你的代码运行结果也会不符合预期:
- 你当前的代码顺序是先计算总时长、总英里数、日均英里数,之后才读取用户输入的8天徒步时长,参与计算的所有时长变量都是未初始化的垃圾值,计算结果完全无效
- 修复方案:将三个计算逻辑移到所有
cin读取操作之后,等用户输入完所有数据再做计算
修复后完整代码
#include <iostream> using namespace std; int main() { int hourswalked, hourswalkedD2, hourswalkedD3, hourswalkedD4, hourswalkedD5, hourswalkedD6, hourswalkedD7,hourswalkedD8; cout << endl << "Please enter the number of hours you have walked each day of your hike" << endl; cin >> hourswalked; cin >> hourswalkedD2; cin >> hourswalkedD3; cin >> hourswalkedD4; cin >> hourswalkedD5; cin >> hourswalkedD6; cin >> hourswalkedD7; cin >> hourswalkedD8; // 输入完成后再执行计算 int total_hours = hourswalked + hourswalkedD2 + hourswalkedD3 + hourswalkedD4 + hourswalkedD5 + hourswalkedD6 + hourswalkedD7 + hourswalkedD8; int total_miles = total_hours * 3; int avg_miles = total_miles / 8; cout << "You walked for " << total_hours << " hours." << endl; cout << "You walked for " << total_miles << " miles." << endl; cout << "On average you walked " << avg_miles << " miles." << endl; return 0; }
可选优化
如果需要得到更精准的日均步行英里数,可以把avg_miles的类型改为double,计算时写为double avg_miles = total_miles * 1.0 / 8;,避免整数除法截断小数部分。
内容的提问来源于stack exchange,提问作者tgol
相关产品推荐
相关产品推荐

