Probleme beim berechnen von Quersumme!



  • Hiho

    Ich hätte gerne gewusst, wie ich aus einem char- Array, gefüllt mit Zahlen, die Quersumme ausrechne?

    Habe bis jetzt folgenden Code:

    #include <iostream>
    #include <cstdlib>
    #include <stdlib.h>
    
    int main ()
    {
    	char Buffer[20];
    	int zaehler = 0;
    	int quersumme;
    	std::cout<< "Geben Sie eine Zahl ein: " << std::flush;
    	std::cin.get(Buffer, sizeof(Buffer));
    
    	while(Buffer[zaehler] != '\0')
    	{
    		quersumme += atoi(Buffer[zaehler]);
    		zaehler ++;
    	}
    
    	std::cout << "Die Quersumme der eingegebenen Zahl betraegt: " << quersumme << std::endl;
    }
    

    Er meint das etwas mit der Konvertierung von char zu const char nicht stimmt :S

    Bin noch Anfänger, was mache ich falsch? Hoffe auf Hilfe

    Timo



    Variablen immer initialisieren:

    int quersumme = 0;
    

    Hier führt das zwar _nur_ zu zufälligen Ergebnissen, bei Arrays und so weiter kann das aber böse enden.

    Der Kompiler hat recht atoi() will einen const char*, also musst du auch einen const char* übergeben:

    char ch[2];
    ch[0] = Buffer[zaehler];
    ch[1] = '\0';
    quersumme += atoi(ch);
    zaehler ++;
    

    // edit: so funktioniert es.

    Zum Schluß ein Tipp:
    Benutze std::string, da macht man weniger Fehler.

    Gruß
    Don06



  • Die Funktion die du benutzt, also atoi() ist für Strings(also Zeichenketten) ausgelegt und nicht für einzelne chars.
    Hier haste nen paar Infos zu atoi: http://www.xon.de/x1/x1ref/index.html?html_atoi.htm

    Um dein Problem zu lösen würd ich folgendes machen:

    #include <iostream>
    #include <cstdlib>
    #include <stdlib.h>
    
    int main ()
    {
        char Buffer[20] = {'\0'};//Dann ist jeder char von Buffer = '\0' -> Das ist sichere für die Schleife unten
        int zaehler = 0;
        int quersumme = 0;
        std::cout<< "Geben Sie eine Zahl ein: " << std::flush;
        std::cin.get(Buffer, sizeof(Buffer));
    
        while(Buffer[zaehler] != '\0')
        {
            quersumme = quersumme + int(Buffer[zaehler]) - 48; //Das int() könnte man auch weglassen
            zaehler ++;
        }
    
        std::cout << "Die Quersumme der eingegebenen Zahl betraegt: " << quersumme << std::endl;
    }
    

    Der Trick ist halt- jedes Zeichen hat ein ASCII-Code(Tabelle gibts hier: http://www.torsten-horn.de/techdocs/ascii.htm)
    So wenn man nun mit chars rechnet, dann rechnet man mit ihren ASCII-Codes (sind ja Zahlen).
    Damit man nun herausbekommt welche Ziffer sich hinter dem Charzeichen befinden, damit man sie in einen integer packen kann zieht man einfach 48 (ist der Code für '0') ab und durch diese Differenz hat man den Wert für die Integervariable heraus.


Anmelden zum Antworten