为什么另一个函数输出错误的值
Why does the other function output the wrong values?
我正在编写一个根查找程序。我已经在这个错误上呆了几个小时了。代码对我来说似乎是对的,但终端输出是错误的。而这个新手在他的职能中有很多论据。我希望你们不要介意。
是的,我已经一遍又一遍地编译代码。
这些是麻烦的台词。下面是我认为相关的所有行。它不是分别输出exp(-x) - x
和Newton-Raphson
,而是给了我Restart selection
和exp(-4*x) - x
。
printf("%25s:%20sn", "Equation", a[eq-1].c_str());
printf("%25s:%20sn", "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:%20sn", "Equation", a[eq-1].c_str());
printf("%25s:%20sn", "Method", b[meth-1].c_str());
if(meth-1 == 1)
printf("%25s:%20fn", "Initial Guess", root1);
else
{
printf("%25s:%20fn", "Initial Guess 1", root1);
printf("%25s:%20fn", "Initial Guess 2", root2);
}
printf("%25s:%20dn", "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:%20dn", "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:%20sn", "Equation", a[eq-1].c_str());
printf("%25s:%20sn", "Method", b[meth-1].c_str());
eq
和 meth
均为 0。这会导致访问索引 -1 处的向量。如果不确定,请使用 at
而不是运算符 [] 来检查传递的边界。 如果索引无效,at
将引发异常; operator []
将静默失败并产生 UB。
相关文章:
- 显示错误输出的简单数组排序程序
- Dijkstra 中的错误输出
- 自定义runtime_error,如果我在 #what 中使用#c_str(),则错误输出始终为空
- 流字符串错误输出
- C++ 异常处理错误输出
- C ++中的错误输出,i = 65530,当我们打印i的值时,它给出-6状态65530
- SSE和iostream:浮点类型的错误输出
- C++将 popen 错误输出读取为字符串
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- C++,向量:获得包含 0 的错误输出
- 数组函数错误输出
- CC1plus 错误:输出文件名指定两次
- 字符串错误输出
- 子斯特的错误输出
- 对大量c++错误输出完全一无所知.我认为这与预定义的函数和迭代器有关
- 简单程序的错误输出
- XCode调试器lldb中断,没有错误输出,但程序运行良好
- std::string::append(std::string)错误输出
- 查看大错误输出的顶行
- 使用结构的错误输出