mercredi 3 février 2021

terminate called after throwing an instance of 'std::out_of_range' and I don't know how to solve it

I am fairly new to codeing, so please, don't mind if this is a stupid question.

So I have been working to code a calculator that works with recursion.

Input: ! + 1 3

code will do 1+3 and then take the faculity of the sum

output: "24"

I finished writing the basic code( not having filtered out wrong user-input yet), when I build it it shows no warnings, but once I run it I get thrown with the 'std::out_of_range' warning. I tried around and nailed the problem down to one function, but I am unable to idenify whats wrong exactly.

//Calculation
string Rechner::berechne(vector <string> t)   //Calculator::calculate
{
   for (unsigned int i = t.size() - 1; i >= 0; i--)  //searches the vector starting from the back
   {
       if( t.at(i) == "+" || t.at(i) == "*" || t.at(i) == "!") //finds the last operator
           {
               t.at(i) = differenziere(i, t);   //switches out the last operator with  
                                                //the result of the operation (differenziere(i, t)
                                                

               if ( t.at(i) == "!")
                 {
                     t.pop_back();            // delets last element of vector and
                     berechne(t);             // searches for the next Operator

                 }
               else
                 {
                     t.pop_back();        //delets last two elements
                     t.pop_back();
                     berechne(t);        //searches for next operator
                 }
           }

   }
   return t.at(0);   //when there is no more operator left, this returns the Result of the whole operation


}

For example input: 5 the output should be 5, because there is no more operator, but i get the out_of_range warning.

input: + 1 3 has the same output of the warning.

So my best guess is, once the vector consists out of one string, for some reason this falls into the if function, what doesn't make sense to me.

Input is a string, that I convert to a vector. This works all fine, i have tested that.

I am working with code::blocks, c++11 and on a windows laptop.

I hope you can help me. Also please excuse my english, it's not my native language. I speak fluet normally, but I haven't been around the topic of coding for long, so this is s a little different for me.

Aucun commentaire:

Enregistrer un commentaire