Hilfe bei einfachem Programm, Schleife spinnt bei Benutzung von double?!
-
Hallo, bin noch ein relativer Anfänger in C++ und da ja learning by doing immer eine gute Initiative ist, wollte ich ein programm schreiben, dass den Durchschnitt beliebig vieler Zahlen errechnet. Der Benutzer hat dabei die Eingabe.
Mein Problem allerdings ist, dass ich für die Noten keine double/float verwenden kann, sobald ich nämlich als Note 2.2 z.B. eingebe, wiederholt sich die schleife 10000x ohne Unterbrechung.
Ansonsten funzt das Programm, wenn man int's nutzt :
#include <cstdlib> #include <iostream> #include <conio.h> using namespace std; int main() { int notenmenge=1; //Fängt bei 1 an zu zählen int note; int gesamt=0; bool finished=false; //Variable für die while-Schleife cout<<"Dieses Programm errechnet den Durschnitt beliebig vieler Zahlen. Durch das eintippen von 0 wird der Durschschnitt berechnet."; while (finished==false) { // User noch keine 0 angegeben, also Schleife weiterhin durchlaufen cout<<"Gib die "<<notenmenge<<". "<<"Note ein :"; scanf("%d", ¬e); if (note==0) { finished = true; cout<<"Gesamtdurchschnitt : "<<(gesamt) / (notenmenge-1)<<" "; } notenmenge += 1; //Zur notenmenge bei jedem Durchlauf +1 hinzuaddieren gesamt += note; } system("PAUSE"); return 0; }Hoffe jemand kann mir erklären woran das liegt :(.
wie gesagt double note; und double gesamt = 0.0; funktioniert nicht.
Gruß Vark
-
du liest mit
%deinen integer ein und ein "." ist dafür ein ungültiges Zeichen. Nehm mal%f(float) oder%lf(double).(Hättest du, wie in c++ üblich
cin >> ...genommen, gäbs das Problem nicht.)
-
#include <cstdlib> #include <iostream> #include <conio.h> using namespace std; int main() { int notenmenge = 0; int note; int gesamt=0; bool finished=false; //Variable für die while-Schleife cout<<"Dieses Programm errechnet den Durschnitt beliebig vieler Zahlen. Durch das eintippen von 0 wird der Durschschnitt berechnet."; while (!finished) { // User noch keine 0 angegeben, also Schleife weiterhin durchlaufen cout<<"Gib die "<<notenmenge+1 <<". "<<"Note ein :"; scanf("%d", ¬e); if (note==0) { finished = true; cout<<"Gesamtdurchschnitt : "<<(double)((double)gesamt /(double)notenmenge)<<" "; } notenmenge++; //Zur notenmenge bei jedem Durchlauf +1 hinzuaddieren gesamt += note; } system("PAUSE"); return 0; }
-
Gewöhn dir am besten gleich von Anfang an eine übersichtliche und einheitliche Formatierung an.
conio.hist kein Standard-C++ und in diesem Fall überflüssig.
Versuche C und C++ Ein- und Ausgaben wenn möglich nicht zu mischen.
Rechtschreibung? (3x "Durchschnitt", davon zwei fehlerhaft)
wieso man die Funktion system meiden soll
Ist zwar schön, dass du kommentierst, aber im Kommentar sollte nicht einfach das stehen, was ganz offensichtlich im Code steht.
#include <iostream> using namespace std; int main() { int notenmenge = 0; double note, gesamt = 0.0; cout << "Dieses Programm errechnet den Durchschnitt beliebig vieler Zahlen.\n" "Durch das Eintippen von 0 wird der Durchschnitt berechnet." << endl; for (;;) { cout << "Gib die " << notenmenge + 1 << ". Note ein: " << flush; cin >> note; if (note == 0.0) { cout << "Gesamtdurchschnitt: "<< gesamt / notenmenge << endl; break; } notenmenge++; gesamt += note; } return 0; }
-
Hi, danke dein Code funktioniert, jedoch der obige nicht, dort bekomme ich wieder diesen Schleifenfehler.
Konnte leider weder auf meine Rechtschreibung noch auf meine Formatierung achten weil ich einen sehr dringenden Termin hatte.
Die Komments habe ich gemacht da ich in den Regeln die ich zugegebener maßen überflogen habe, was davon gelesen habe.
Nutze DEV-C++ deswegen habe ich den system Befehl gemacht, hätte ja auch cin>>x machen können. Ich gehe nun in eine Schule die das Fach Informatik am meisten vorgezogen hat, wird wohl dort schon eine IDE haben, der das Programm nicht nach durchlauf schließt.
Was kommen dort für Programmiersprachen auf einen zu? Ist ja unterschiedlich aber gibt es irgendwas das dort am häufigsten "gelehrt" wird?
Gruß Vark und danke nochmal.
-
@laga
Gib da mal gleich eine 0 ein.