这是我制作的一个程序,我是C ++的新手(昨天开始),该程序假设通过从用户获取字符串形式的函数并使用“ccc_win.h”绘制它来绘制多项式函数。图书馆但是 每次我尝试编译程序时都会出现此消息:
Debug Assertion Failed !!
表达式:向量下标超出范围
我不知道问题是什么,请你帮我。
#include "ccc_win.h"
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
int ccc_win_main()
{
vector <double> coefficient;
vector <double> power;
string input = cwin.get_string("enter the equation >>");
int length = input.length();
int i = 0;
while (i <length)
{
if (input[i] == '=' || input[i] == '+' || input[i] == '-')
{
string c;
int j = i + 1;
while (input[j] != '(')
{
c += input[j];
j += 1;
}
double c_double = ::atof(c.c_str());
coefficient.push_back(c_double);
}
else if (input[i] == '^')
{
string p;
int j = i + 1;
while (input[j] != ')')
{
p += input[j];
j += 1;
}
double p_double = ::atof(p.c_str());
power.push_back(p_double);
}
i++;
}
cwin << Line(Point(0, -10), Point(0, 10)) << Line(Point(-10, 0), Point(10, 0));
double x = 0, y = 0;
for (x = 10; x <= 10; x += 0.001)
{
for (int k = 1; k <= 10; k++)
{
y += (coefficient[i] * pow(x, power[i]));
}
Point a(x, y);
cwin << a;
}
return 0;
}
答案 0 :(得分:1)
行int j = i + 1;
对于指向最后一个元素的 i ,j将指向数组外部。设置后,您还需要检查是否j < length
同样在这里:
for (int k = 1; k <= 10; k++)
{
y += (coefficient[i] * pow(x, power[i]));
}
您正在循环k但使用i作为系数。但是i ==那时的长度,因为前一个循环递增它并在i == length时结束。
您确定在上面的循环中不想要k
而不是i
吗? i
当然肯定有不正确的值。