000
22.10.2004, 18:45 Uhr
~seppel
Gast
|
meine funktion addition spukt teilweise falsche werte aus, wenn man zum beispiel 23+45+67 eingibt, dann addiert sie nur die werte 23+45+7. bei der eingabe von 1+23+456 addiert er jedoch richtig. zudem kann der fehler nicht bei der funktion gziffer liegen, sondern in bei addition. die ausgaben von cout * geben übrigens die position der vorzeichen an, diese werden richtig ausgegeben, erst dann muss der fehler kommen.
danke für jede hilfe!
C++: |
#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; //* position der vorzeichen 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;; //hier vermute ich 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; }
|
|