funktion tut nicht(ganz) was sie soll...



  • meine funktion addition spukt teilweise falsche werte aus, wenn man zum beispiel 23+45+67 eingibt, dann addiert er die werte 23+45+7. bei eingabe 1+23+456 addiert er jedoch richtig. zudem kann der fehler nicht bei der fuktion gziffer liegen, sondern nur bei addition. ich bin anfänger und finde diesen fehler äußerst verwirrend. die ausgaben von cout geben übrigens die position der vorzeichen an, diese werden richtig ausgegeben, erst dann muss der fehler kommen.

    #include <iostream>
    #include <cstdlib>
    #include <vector>
    
    using namespace std;
    
    vector<long> vgziffer;
    
    long ziffer(char c) {
      long zahl = static_cast<long>(c) - static_cast<long>('0');
      return zahl;
    }
    
    long gziffer(vector<char>& vc, int pos) { 
       int x = 0; 
       long zerg = 0;
       int negcounter = 0;
    
       bool is_nega = false; 
    
       vc.erase(vc.begin(), vc.begin()+pos);  //löscht die ersten n elemente eines vectors ==> deque verwenden für vs.:0.2
    
       if(vc.size() > 1) {
         is_nega = ((vc[0] == '-')? true : false);  //Bedingungsoperator 
         negcounter++;
       }
    
       while(x < vc.size()) { 
         if(isdigit(vc[x])) 
           zerg = zerg * 10 + ziffer(vc[x]);
         ++x;
    
         if(!isdigit(vc[x]))
           break;
    
       } 
       if(is_nega) zerg *= (-1); 
    
       return zerg; 
    }
    
    long addition(vector<char>& vc) {
      int x, z;
      long aerg = 0;
      vector<long> pos, zerg;
    
      if(isdigit(vc[0]))
        pos.push_back(0);  //damit auch immer bei der ersten zahl angefanen wird
    
      for(x = 0; x < vc.size(); x++) {
        if (vc[x] == '+')
          pos.push_back(x);
        if (vc[x] == '-')
          pos.push_back(x);
      }cout<<pos[0]<<endl<<pos[1]<<endl<<pos[2]<<endl<<pos[3]<<endl;
    
      for(x = 0; x < pos.size(); x++) {
        zerg.push_back(gziffer(vc, pos[x]));
      }cout<<zerg[0]<<endl<<zerg[1]<<endl<<zerg[2]<<endl<<zerg[3]<<endl;;
    
      for(x = 0; x < zerg.size(); x++) {
        aerg += zerg[x];
      }
    
      return aerg;
    }
    
    int main(int argc, char *argv[])
    {
      char eingabe;
      vector<char> veingabe;
    
      while(true) {
        cin.get(eingabe);
        if(eingabe != 'e')
          veingabe.push_back(eingabe);
        else break;
      }
      cout<<addition(veingabe);
    
      return EXIT_SUCCESS;
    }
    


  • Deine Programme werden mit der Zeit immer größer und es wird immer schwieriger, einen Fehler zu finden. Du wirst nicht umhinkommen, dich mit dem Debugger vertraut zu machen. Ich denke, jetzt ist ein guter Zeitpunkt dafür. Damit siehst du immer alle Werte von Variablen und kannst so den Fehlerquellcode zumindest einschränken.

    [EDIT] Ich werd grad im IRC zugeschwallt ( 😉 ), dass du dafür noch keinen Debugger brauchst, aber mit so nem nützlichen Tool hat man den Fehler in wenigen Sekunden. Es lohnt sich also auf jeden Fall, damit anzufangen.



  • gut...


Anmelden zum Antworten