c++ Zahleneingaben auswerten



  • Hallo liebe Leute, ich ich lese gerade das Buch Eintieg in C++ von Arnold Willemer und bin jetzt beim Theme Zahleneingaben auswerten.

    Ich verstehe nicht so ganz was der nutzen davon ist, ich würde euch bitten mir eine Eklärung zu schreiben vllt mit einem Beispiel.

    Der Quelltext sieht wie folgt aus:

    #include <iostream>
    
    using namespace std;
    
    const int MAX=256;
    
    int main (){
    
    char input [MAX];
    int i = 0;
    long Wert = 0;
    
    cin.getline(input, MAX);
    while (input[i] >='0' && input [i] <='9')
    {
    	Wert *= 10;
    	Wert += input [i] - '0';
    	i++;
    }
    cout << Wert << endl;
    
    cin.get ();
    return 0;
    }
    


  • Der Nutzen ist, dass du lernst mit C++ umzugehen und nebenbei noch mitnehmen kannst, wie man "zu Fuß" eine numerische Zeichenkette in eine Dezimalzahl umwandelt.

    Finnegan



  • Sgaf schrieb:

    #include <iostream>
    
    const int MAX=256;
    
    int main (){
    	
        char input [MAX];
        // ... 
        cin.getline(input, MAX);
    

    Finnegan schrieb:

    Der Nutzen ist, dass du lernst mit C++ umzugehen ...

    Hmh! .. kann man auch anderer Meinung sein 😕



  • Angenommen, Du gibst bei der Ausführung des Programms 42 in die Tastatur ein.

    Dann hast Du in dem Array input 3 Zeichen stehen:
    input ----> '4' | '2' | '\0' | ...

    Das unterscheidet sich deutlich von der Zahl 42. Z.B. kannst Du mit input nicht rechnen.
    Um jetzt aus dieser Textdarstellung der Zahl 42 zur Zahl 42 zu gelangen, z.B. als long Variable ist der Algorithmus da.

    Der Algorithmus ist nicht sonderlich kompliziert, setzt allerdings folgendes voraus:
    Die Ziffern '0'-'9' sind mit aufsteigenden und hintereinanderliegenden Zahlen codiert.
    Das ist z.B. bei Ascii der Fall, wo der Code 48 für '0' ("Null") steht, 49 für '1' ("Eins") usw. bis 57 für '9' ("Neun").

    Diese Voraussetzung muss erfüllt sein, sowohl für die Laufbedingung der while-Schleife, als auch für die Subtraktion in Zeile 17.
    Zeile 17 zieht den Code für das Zeichen '0' - also 48 - vom Code des jeweiligen Zeichens ab, um so von den Codes '0'-'9' zu den Zahlen 0-9 zu gelangen.

    Am besten Du rechnest mal mit Papier und Bleistift ein Beispiel nach, oder pflasterst den Quellcode mit (Debug-)Ausgaben, um zu sehen, was Phase ist.



  • Danke schön für die Antworten, ich verstehe jetzt was man damit anfangen könnte ich muss mir jetzt den Algorithmus genauer angucken, denn ich versteh ihn noch nicht so ganz.

    In dem

    cin.getline (input, MAX);
    

    könnte ich jetzt laut dem vorgezeigtem Quelltext oben 256 zeichen eingeben die dann im array imput gespeichert werden?

    Aber warum muss ich dann MAX dann noch als Parameter eintragen?

    Und diesen Part:

    while (input[i] >='0' && input [i] <='9')
    {
        Wert *= 10;
        Wert += input [i] - '0';
        i++;
    }
    

    versteh ich nicht was der nutzen ist.



  • Somit kannst du steuern, wie viele chars getline denn lesen soll. Und du kannst dir vorstellen, dass es knallt, wenn du mehr einließt, als dein Array überhaupt Platz hat.


Log in to reply