You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++自定义函数无法在main函数中执行的问题求助

问题原因分析
  • 函数未实际调用:main函数的do循环里,int FtoCTemp (int argc, char** argv);是函数声明语句,不是函数调用。C++中调用函数不需要写返回值和参数类型,正确的调用形式是FtoCTemp(argc, argv);。
  • 函数返回值不符合要求:FtoCTemp声明为int类型,但函数体内没有任何return语句,这会触发未定义行为,可能干扰程序执行流程。
  • 逻辑冗余混乱:do循环内重复执行了函数里已经有的"询问是否继续"逻辑,导致函数执行后的输入被覆盖,同时函数的执行逻辑和循环逻辑脱节。
  • 全局变量滥用:Fahrenheit、Celsius、Answer等变量被声明为全局变量,虽然不是直接导致函数不执行的原因,但会增加代码耦合度,容易引发其他逻辑错误。
解决建议

1. 修正函数调用

将main函数内的声明语句替换为实际调用:

int main(int argc, char** argv) {
    do{      
        // 替换原声明语句为函数调用
        FtoCTemp(argc, argv);
    } while (Answer == 'y' || Answer == 'Y');
    
    cout << "Thank you!";
    return 0;
}

2. 修复函数返回值问题

因为FtoCTemp不需要返回值,直接将其返回类型改为void,避免未定义行为:

void FtoCTemp (int argc, char** argv){
    // 原函数内容不变,无需返回值
}

3. 优化变量作用域(可选但推荐)

将全局变量改为函数内的局部变量,减少全局污染,同时可以让函数返回用户选择,彻底摆脱全局变量:

#include <iostream>
using namespace std;

char FtoCTemp (){
    int Fahrenheit, Celsius ;  
    char Answer;
    cout << "What Fahrenheit  Value Do You Want in Celsius" << endl; 
    cin >> Fahrenheit;                                                    
    
    Celsius = (Fahrenheit -32);          
    Celsius = (Celsius * 5/9);
    
    cout << Celsius << " Celsius" << endl;
    cout << "Would you like to enter another Fahrenheit" << endl;
    cin >> Answer;
    return Answer;
}

int main() {
    char Answer;
    do{      
        Answer = FtoCTemp();
    } while (Answer == 'y' || Answer == 'Y');
    
    cout << "Thank you!";
    return 0;
}

4. 清理冗余逻辑

去掉main函数内重复的询问和输入代码,让函数负责温度转换和用户选择询问,循环只负责判断是否继续执行。

内容的提问来源于stack exchange,提问作者GWchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:30:12