[C/C++] if-rumpf wird nich korrekt abgearbeitet

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von avoir, 7. Mai 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Mai 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    if-rumpf wird nich korrekt abgearbeitet

    Hi
    sry wusst net was ich in den Titel schreiben sollte....

    Mein Problem ist folgendes:
    Ich versuche mir im Moment C++ anzueignen und habe mir für diesen Zweck auch nen ziemlich dicken Wälzer besorgt (C++ Primer, falls jmd den kennen sollte).

    Momentan bin ich bei Vektoren und versuche eine gegebene Aufgabenstellung zu bewätigen. Das klappt aber nich so, wie ich mir das vorstelle.

    Die Aufgabenstellung:
    Das hat geklappt, nun wollte ich dies versuchen:
    Wenn man eine ungerade Anzahl an Zahlen eingibt, wird dies dem Benutzer mitgeteilt und aufgefordert eine weitere Zahl einzugeben.
    Hier hakt es!

    Code:
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
     cout << "Please enter a few numbers..." << endl;
     
     vector<int> vec;
     int numbers, counter, checksum, vecindex=0;
     /*
     * numbers: Die Zahlen die eingelesen werden
     * checksum: Überprüfung ob eine ungerade oder gerade Anzahl an Zahlen eingegeben wurde
     * counter: Die Anzahl der Durchgänge der for-Schleife --> Hälfte alles eingegebeben Zahlen
     * vecindex: Die Indexzahl des Vektors um später die jeweils aufeinanderfolgenden Indexe zusammenzuzählen
     */
    
     while (cin >> numbers)
     vec.push_back(numbers);
     // EOF mit Strg+E
     
     
     checksum = (vec.size() % 2); // Modulo mit 2: Zahl ungerade = 1 <--> Zahl gerade = 0
     // cout << checksum << endl; // Überprüfung, was checksum für einen Wert hat
     if (checksum == 1)
     {
    [COLOR="SeaGreen"] cout << "Bitte noch eine weitere Zahl eingeben." << endl;
     cin >> numbers;
     vec.push_back(numbers);[/COLOR]
     }
    
     cout << "Es wurden " << vec.size() << " Zahlen eingegeben." << endl;
     cout << "Die jeweils aufeinander folgenden Zahlen werden addiert: " << endl;
     
     counter = (vec.size() / 2);
     // Zusammenzählen der jeweils aufeinanderfolgenden Zahlen im Vektor
     for (int i = 0; i < counter; i++)
     {
     cout << (vec[vecindex] + vec[vecindex + 1]) << endl;
     vecindex += 2;
     }
    
     system("PAUSE");
     return EXIT_SUCCESS;
    }
    
    Das kommt dabei raus

    Bild

    Die zweite Eingabe im if-Rumpf mit cin wird nicht gemacht und er pusht einfach den letzten Wert nochmal hinein. (Grün markiert)

    Wo ist mein Fehler?

    Thx in advance
     
  2. 7. Mai 2008
    AW: if-rumpf wird nich korrekt abgearbeitet

    Hab meinen Code ein bisschen umgeschrieben, auf einmal funktioniert es wunderbar:

    Code:
    ....
    int numbers, counter, checksum, vecindex=0;
     string eingabe;
     /*
     * numbers: Die Zahlen die eingelesen werden
     * checksum: Überprüfung ob eine ungerade oder gerade Anzahl an Zahlen eingegeben wurde
     * counter: Die Anzahl der Durchgänge der for-Schleife --> Hälfte alles eingegebeben Zahlen
     * vecindex: Die Indexzahl des Vektors um später die jeweils aufeinanderfolgenden Indexe zusammenzuzählen
     * eingabe: Eingabe der Zahlen als String
     */
    
     while (cin >> eingabe && eingabe != "end")
     {
     numbers = atoi(eingabe.c_str());
     vec.push_back(numbers);
     }
     
     
     
     checksum = (vec.size() % 2); // Modulo mit 2: Zahl ungerade = 1 <--> Zahl gerade = 0
     // cout << checksum << endl; // Überprüfung, was checksum für einen Wert hat
     if (checksum == 1)
     {
     cout << "Bitte noch eine weitere Zahl eingeben." << endl;
     cin >> numbers;
     vec.push_back(numbers);
     }
    .....
    
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.