C++函数未被调用却提前执行?求问题排查解决方法
搞定这个提前触发函数的小问题!
嘿,我明白你现在的困扰啦!你明明只想先收集完两个变量再调用avg_rain函数,结果刚输入第一个变量函数就直接跑起来了——这种情况我之前也碰到过,结合你给出的代码片段,大概率是函数调用的写法出了问题,咱们一步步来理清楚:
大概率踩的坑:把输入操作直接放进函数参数里了
我猜你可能不小心写成了下面这种形式:
// 错误示例!别这么写 avg_rain(cin >> file, cin >> unit);
这种写法会让cin >> file先执行(也就是你输入第一个文件名的时候),而且这个输入操作的返回值(是cin对象本身,不是你输入的文件名)会被传入函数,紧接着cin >> unit也会执行,函数会在这两个输入操作启动时就被调用,完全不符合你“先收集变量再调用”的预期。
正确的打开方式:先收齐变量,再调用函数
你需要把输入操作和函数调用彻底分开,先把两个变量都拿到手,再传给函数。补全后的代码应该是这样的:
#include <iostream> #include <string> #include <fstream> using namespace std; void avg_rain(string, string); int main() { string file, unit; // 先收集第一个变量:文件名 cout << "Please type the file name with extension: "; cin >> file; // 再收集第二个变量:单位 cout << "Please type the unit (like mm or inches): "; cin >> unit; // 两个变量都搞定了,再调用函数! avg_rain(file, unit); } // 别忘了实现你的avg_rain函数哦 void avg_rain(string filename, string unit) { // 这里写你计算平均降雨量的逻辑,比如读取文件、计算输出 cout << "Now processing file: " << filename << " with unit: " << unit << endl; }
划重点
- 一定要先完成所有输入操作,把变量都赋值到位,再调用函数。
- 函数参数里要传的是变量本身(比如
file、unit),而不是输入操作的表达式(cin >> file是执行输入的动作,不是变量的值)。
内容的提问来源于stack exchange,提问作者Christian Potts
相关产品推荐
相关产品推荐

