Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » fehler in meiner funktion...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.10.2004, 00:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


öhm das ist mir jetzt gerade zu kompliziert das zu suchen probier es doch mal lieber in der art...


C++:
#include <iostream>
#include <string>
#include <vector>


bool is_number(std::string number){
//das hier musst du noch schreiben indem du abcheckst ob ne gültige nummer eingegeben wurde...
return true;
}

long addition(std::vector<long> &eingabe){
    long rv=0;
    for(std::vector<long>::iterator i= eingabe.begin();i!=eingabe.end();++i)rv+=*i;
    return rv;
}

int main(){
std::vector<long> veingabe;
std::string eingabe;

while(eingabe!="exit"){
    std::getline(std::cin,eingabe);
    if(is_number(eingabe))
        veingabe.push_back(atoi(eingabe.c_str()));
}

std::cout<<addition(veingabe)<<std::endl;

return EXIT_SUCCESS;
}



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: