gpt4 book ai didi

c++ - 为什么其他函数输出错误的值?

转载 作者:行者123 更新时间:2023-11-28 07:11:16 25 4
gpt4 key购买 nike

我正在编写一个寻根程序。我已经在这个错误上好几个小时了。代码对我来说似乎是正确的,但终端输出是错误的。这个新手在他的函数中有很多参数。希望大家不要介意。

是的,我一遍又一遍地编译代码。

这些是麻烦的线路。下面是我认为相关的所有行。它不是分别输出 exp(-x) - xNewton-Raphson,而是给我 Restart selectionexp(- 4*x) - x.

printf("%25s:%20s\n", "Equation", a[eq-1].c_str());
printf("%25s:%20s\n", "Method", b[meth-1].c_str());

下面是main()中的相关变量。

vector<string> functName;
vector<string> methodName;
vector<string> advSettings;

int c_eq = 0;
int c_met = 0;
int c_settings = 0;
double c_guess1 = 0;
double c_guess2 = 0;

// defaults
int sigFigs = 6;
int iter = 1000;
int iterMode = 0;
int perIter = 0;
int plotMode = 0;

functName.push_back("exp(-x) - x");
functName.push_back("exp(-2*x) - x");
functName.push_back("exp(-3*x) - x");
functName.push_back("exp(-4*x) - x");

methodName.push_back("Newton-Raphson");
methodName.push_back("False Position");
methodName.push_back("Bisection");
methodName.push_back("Secant");

advSettings.push_back("Proceed with settings");
advSettings.push_back("Restart selection");
advSettings.push_back("Change advanced settings");

这是第一个正确输出内容的函数。

template <typename inputType>
void basicInterface(const vector<string> &a,
const vector<string> &b,
int eq,
int meth,
inputType &root1,
inputType &root2)
{
cout << "Input the corresponding number of your choice.\n";
cout << "Choose an equation to solve:\n";
for (int i = 0; i < a.size(); i++)
cout << "[" << i+1 << "] " << a[i] << endl; // line of interest
cout << " >>> ";
inputCheck(eq,1,4);

cout << "Choose a method to use:\n";
for (int i = 0; i < b.size(); i++)
cout << "[" << i+1 << "] " << b[i] << endl; // line of interest
cout << " >>> ";
inputCheck(meth,1,4);

// more stuff
}

感兴趣的行在我的终端中输出以下内容,这是正确的。

[1] exp(-x) - x
[2] exp(-2*x) - x
[3] exp(-3*x) - x
[4] exp(-4*x) - x

[1] Newton-Raphson
[2] False Position
[3] Bisection
[4] Secant

这个应该显示所有内容的函数,

template <typename inputType>
void showSettings( const vector<string> &a,
const vector<string> &b,
int eq,
int meth,
inputType root1,
inputType root2,
int sigs,
int showPerLoop,
int plotRoots,
int loopMode,
int minLoops)
{
cout << "Requirements satisfied.\n";
printf("%25s:%20s\n", "Equation", a[eq-1].c_str());
printf("%25s:%20s\n", "Method", b[meth-1].c_str());
if(meth-1 == 1)
printf("%25s:%20f\n", "Initial Guess", root1);
else
{
printf("%25s:%20f\n", "Initial Guess 1", root1);
printf("%25s:%20f\n", "Initial Guess 2", root2);
}
printf("%25s:%20d\n", "Minimum Sig Figs", sigs);
printf("%25s:%20d (1 if true)\n", "Show Root per Iteration", showPerLoop);
printf("%25s:%20d (1 if true)\n", "Show Root Graph", plotRoots);
printf("%25s:%20d (1 if true)\n", "Iteration Mode", loopMode);
printf("%25s:%20d\n", "Minimum Iterations", minLoops);
}

几乎给出了完美的输出。

                 Equation:   Restart selection        // where did these
Method: exp(-4*x) - x // come from?
Initial Guess 1: 1.000000
Initial Guess 2: 0.000000
Minimum Sig Figs: 6
Show Root per Iteration: 0 (1 if true)
Show Root Graph: 0 (1 if true)
Iteration Mode: 0 (1 if true)
Minimum Iterations: 1000

以下是我用来调用这两个函数的行。

    basicInterface( functName,
methodName,
c_eq,
c_met,
c_guess1,
c_guess2);

showSettings( functName,
methodName,
c_eq,
c_met,
c_guess1,
c_guess2,
sigFigs,
perIter,
plotMode,
iterMode,
iter);

最佳答案

您发布了很多代码。但似乎这两行产生了你的输出。

printf("%25s:%20s\n", "Equation", a[eq-1].c_str());
printf("%25s:%20s\n", "Method", b[meth-1].c_str());

eqmeth 都是 0。这会导致访问索引 -1 处的 vector 。如果不确定,请使用 at 而不是 operator [] 来检查传递的边界。如果索引无效,at 将抛出异常; operator [] 将静默失败并生成 UB。

关于c++ - 为什么其他函数输出错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com