Falsche Ausgabe!?!
-
Hallo @ all,
kann mir jemand sagen warum das Programm eine falsche Zahl bei der Summe auswirft?Ausgabe des Programms:
Die eingegebene Summe ist: -282822568
Diese Ausgabe ist leider nach 5 einträgen mit einer 1 Falsch. Kann mir jemand sagen was ich da nicht richtig habe?
Gruss Michael
#include <iostream.h> #include <conio.h> int main() { long int eingabe[1000]; int i = 0; int z = 1; int status; long int summe = 0; cout<<"Geben Sie den Status an(0 = C++, 1 = C): "; cin>>status; cout<<" "<<endl; if(status == 0) { cout<<"(C++) - Eingabe der Zahl "<<z<<" : "; cin>>eingabe[i]; } else { printf("(C) - Eingabe der Zahl %d: ",z); scanf("%d",&eingabe[i]); } while(true) { if(eingabe[i] < 0) { if(status == 0) { cout<<"Die eingegebene Endsumme beträgt: "<<summe<<endl; cout<<"Es wurden "<<i<<" positive Zahlen eingegeben."<<endl;; break; } else { printf("Es wurden %d positive Zahlen eingegeben.\n",i); printf("Die eingegebene Summe ist: %d",summe); break; } } else { if(status == 0) { ++i; ++z; summe += eingabe[i]; cout<<"(C++) - Eingabe der Zahl "<<z<<" : "; cin>>eingabe[i]; } else { ++i; ++z; summe += eingabe[i]; printf("(C) - Eingabe der Zahl %d: ",z); scanf("%d",&eingabe[i]); } } } getch(); }
-
Du solltest zuerst eingabe[i] auf summe aufaddieren und danach i erhöhen.
-
MFK schrieb:
Du solltest zuerst eingabe[i] auf summe aufaddieren und danach i erhöhen.
Geht leider nicht, denn dann Springt mir das bei Code 1 nach dem 5 Eintrag raus und sagt das 5 mal eine positive Zahl eingegeben wurde. Als summe bekomme ich dann -282822561
-
Was ist "Code 1"?
Wenn ich die angesprochene Änderung durchführe, funktioniert das Programm hervorrragend. Zeig doch mal den geänderten Code, der bei dir nicht funktioniert.
-
dE_MaStEr schrieb:
long int eingabe[1000]; int i = 0; ... ++i; ++z; summe += eingabe[i];
Undefiniertes Verhalten. Du greifst auf einen Eintrag im array zu von dem du nicht weisst was drin steht.
eingabe[i-1] mal versuchen.Bei printf(..) %ld statt %d verwenden wenns ein long int ist.
-
MFK schrieb:
Was ist "Code 1"?
Wenn ich die angesprochene Änderung durchführe, funktioniert das Programm hervorrragend. Zeig doch mal den geänderten Code, der bei dir nicht funktioniert.
Sorry bei Code eins springt der raus. Code ist die Angabe ob der das mit C oder C++ erledigen soll.
Der sollte nur rausgehen wenn man eine negative Zahl eingibt.
Hier die Ausgabe:
Geben Sie den Status an(0 = C++, 1 = C): 0
(C++) - Eingabe der Zahl 1 : 1
(C++) - Eingabe der Zahl 2 : 1
(C++) - Eingabe der Zahl 3 : 1
(C++) - Eingabe der Zahl 4 : 1
(C++) - Eingabe der Zahl 5 : 1
(C++) - Eingabe der Zahl 6 : 1
Die eingegebene Endsumme betrõgt: -282822566
Es wurden 5 positive Zahlen eingegeben.#include <iostream.h> #include <conio.h> int main() { long int eingabe[1000]; int i = 0; int z = 1; int status; long int summe = 0; cout<<"Geben Sie den Status an(0 = C++, 1 = C): "; cin>>status; cout<<" "<<endl; if(status == 0) { cout<<"(C++) - Eingabe der Zahl "<<z<<" : "; cin>>eingabe[i]; } else { printf("(C) - Eingabe der Zahl %d: ",z); scanf("%d",&eingabe[i]); } while(true) { if(eingabe[i] < 0) { if(status == 0) { cout<<"Die eingegebene Endsumme beträgt: "<<summe<<endl; cout<<"Es wurden "<<i<<" positive Zahlen eingegeben."<<endl;; break; } else { printf("Es wurden %d positive Zahlen eingegeben.\n",i); printf("Die eingegebene Summe ist: %d",summe); break; } } else { if(status == 0) { ++z; summe += eingabe[i]; cout<<"(C++) - Eingabe der Zahl "<<z<<" : "; cin>>eingabe[i]; ++i; } else { ++z; summe += eingabe[i]; printf("(C) - Eingabe der Zahl %d: ",z); scanf("%d",&eingabe[i]); ++i; } } } getch(); }
-
erhoeh mal dein i vor der while-schleife und schreib
if(eingabe[i-1] < 0)
so greifst du immernoch auf unbekannte Speicherbereiche zu, sprich auf das Element was als naechstes beschrieben wird und nicht welches zuletst beschrieben wurde.
-
++z; summe += eingabe[i]; ++i; // dann die eingabe
Du solltest nur das Aufsummieren vor die Erhöhung von i setzen. Nicht die Erhöhung von i hinter die Eingabe