Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用结构向量c++;_C++_Assertion - Fatal编程技术网

C++ 使用结构向量c++;

C++ 使用结构向量c++;,c++,assertion,C++,Assertion,我有一个程序,我想从字符串中更新一个变量。函数将读取一个字符串,找出它是否是加法、减法等,然后将其添加到变量中。其功能是: using namespace std; struct variable{ string name; int value; }; void update_varabile(string line, vector<variable> & v) { char c = line[0]; //variable to be

我有一个程序,我想从字符串中更新一个变量。函数将读取一个字符串,找出它是否是加法、减法等,然后将其添加到变量中。其功能是:

    using namespace std;

struct variable{
    string name;
    int value;
};

void update_varabile(string line, vector<variable> & v)
{
    char c = line[0];   //variable to be updated
    string b;
    char d[0];
    int flag = 0;       //counter
    int a = 0;
    int temp_value = 0;
    int perm_value = 0;
    for (int i = 0; i < v.size(); i++) {
        if (c == v[i].name[0]) {
            flag = 1;
            temp_value = v[i].value;
            break;
        }
    }
    if (flag == 1) {                //variable is present
        for (int i = 0; i< line.size(); i++) {
            if (line[i] == '+'|| line[i] =='-'|| line[i] == '*'|| line[i] =='/') {
                b[0] = line[i+1];               //assuming the integer is between 0 and 9
                d[0] = b[0];
                a = atoi (d);
            if (line [i] == '+') {
                perm_value = temp_value + a;
            } else if (line [i] == '-') {
                perm_value = temp_value - a;
            } else if (line [i] == '*') {
                perm_value = temp_value * a;
            } else if (line [i] == '/') {
                perm_value = temp_value / a;
            }
        }
        }
        for (int i = 0; i < v.size(); i++) {
            if (v[i].name[0] == 'c') {
                v[i].value = perm_value;
                break;
            }
        }
    }

}

我已经逐行运行了调试器,它显示函数正确执行。我还试图在我的计算机上查找该C:/文件,但它不存在。不知道为什么这不起作用。

首先,摆脱所有的休息。在每个case语句结束时,只使用C++中的断点。让我几乎不可能通过一系列中断来阅读代码,因为我必须下去找出每一个中断是什么以及为什么。如果您需要尽早退出for循环,那么使用while循环。您不需要在if和else语句末尾加上中断,因为它们会导致程序提前离开函数,如果您使用if、else if和else条件格式,if和else语句将自然跳过

话虽如此,你需要更好地分解你正在尝试做的事情。 例如,您将获得如下字符串值。 2+3+4-5+6 您的程序将从左向右读取。我假设你想让它取第一个值,也就是2,然后加上3,然后再加上4,依此类推,第四个

方法是首先解析字符串中的int值,然后解析加法和减法值。换句话说,从字符串中读取int值,直到找到一个不在0和9之间的值。然后查看该非数值是否是您要查找的运算符。这样您的程序就不会在2555和2这样的值上出错

//intValueHolder是一个字符串。

而(i='0'&&line[i]谢谢你的回答。这是给学校的,我不想找人重写它;我只是想了解发生了什么。我们可以假设只会添加一个整数,因为我正在测试这个函数以获得更大的任务。因此,我不必担心添加“34+56-9”之类的内容。它只需要处理一个简单的语句,如“c=c+2”,根据调试器,我认为它可以做到。因此,对于“c=c-3”这样的语句,上面的格式将是相同的。如果这能为您指明正确的方向。好吧,那么您基本上是在用main中的值替换c?请澄清特定输入的预期输出应该是什么。因此,如果您输入的是“c=c-3”您希望返回什么?这样我可以看到错误发生的地方。另外,请停止中断,这是一个不好的编程习惯,我是根据经验说的。我在我的程序中去掉了它们,谢谢您告诉我。因此,我在main中设置了val=0,这个程序将读取表示“c=c+2”的字符串,找到“+”,然后知道在+(在本例中是数字2)之后添加任何内容,然后更新变量c。因此,在最后,如果我打印出c的值,它将是2。如果语句是“c=c-3”,它将从0中减去3,因此将打印-3。如果您不担心垃圾或其他值,只需在中遍历字符串,直到遇到符号,然后字符串的其余部分放入另一个字符串并在其上运行atoi。就这么简单。然后运行您需要的任何操作。
int main()
{
    variable a;
    int val = 0;
    string up = "c=c+2";
    string f = "c";
    vector<variable> q;
    a.name = f;
    a.value = val;
    q.push_back(a);
    update_varabile(up, q);
    return 0;
}
Assertion failed: ((m_->valid == LIFE_MUTEX) && (m_->busy > 0)), file C:/crossdev/src/winpthreads-git20141130/src/mutex.c, line 57

Process returned 1 (0x1)   execution time : 0.014 s
Press any key to continue.
//intValueHolder is a string.
while(i < line.size() && line[i] >= '0' && line[i] <= '9' ) {
      intValueHolder.push_back(string[i]);
}