C++ Wo ist der fehler ?

abdi-61

Lieutenant
Registriert
Okt. 2011
Beiträge
519
#include <iostream>
#include "windows.h"

using namespace std;

float main(){


float a,x,y,erg;
char ch[4];


x==0.0;
cout<<"Gib die 1.zahl ein:\t"<<endl;
cin>>x;

for(a=2; a<1000000; a++)
{
cout<<"Gib die "<<a<<". Zahl ein:\t"<<endl;
cin>>y&&ch;

erg = x+=y;

cout<<" "<<x<<" + "<<y<<" = "<<erg<<endl<<endl<<endl;


if (ch == "end")
{
break;
}
}


return 0;

system("PAUSE");

}


Also ich möchte das wenn man end eingibt die schleife beendet wir aber statt aus der for schleife zu springen zählt das programm bis 1000000.
Ist break die falsche funktion oder was mach ich falsch ?
Danke
 
Wie wärs damit die Variablen mal sinnvoll zu benennen? Code korrekt einrücken? main() einen Integer zurückliefern lassen?
 
Naja so klein wie das programm ist sollte das doch nicht jetzt so ein großes proplem sein herrauszufinden was es macht.
 
abdi-61 schrieb:
Naja so klein wie das programm ist sollte das doch nicht jetzt so ein großes proplem sein herrauszufinden was es macht.

1.Code einrücken
2.Wenns denn so klein ist, kannst du doch auch selbst den Fehler finden

Entweder Int oder Void für die Main-Methode.
 
Code:
x==0.0;
Soll das initialisieren? Das ist ein Vergleichsausdruck, keine Zuweisung.
Code:
cin>>y&&ch;
Was soll das machen? o_O (kann durchaus sein, dass das was macht. Da bin ich in C++ zu sehr raus)
Code:
erg = x+=y;
Gruselig.
Code:
ch == "end"
Kann mir kaum vorstellen, dass das als "String"-Vergleich funktioniert. Hab C++ ewig nicht angefasst, aber das vergleicht doch bestimmt nur die Adresse des arrays mit dem String. Benutze doch bitte direkt c++-Strings, statt so ein Gefrickel. Da gibt es dann auch eine compare-Methode.

Du solltest wirklich erst einmal aufräumen in deinem Programm.
 
float main(){
wieso nicht int main?

x==0.0;
Absichtlich ein Vergleich oder soll das eigentlich eine Zuweisung sein?

cin>>y&&ch;
Wie bitte was?

for(a=2; a<1000000; a++)
Warum kein int in der For-Schleife, sondern eine zuvor deklarierte Floatvariable?

erg = x+=y;
Was soll das zweite Gleichheitszeichen da?

return 0;
system("PAUSE");
Die Pause nach dem Beenden des Programms? Sollte die nicht eher davor sein?

Einrücken, mal ein paar Dinge nachlesen und dich etwas mehr mit der Sprache beschäftigen. Dann zweite Version des Codes posten.
 
@SymA hab ich gesagt es ist leicht ist den fehler zu finden ?
nein ich habe gesagt :
Naja so klein wie das programm ist sollte das doch nicht jetzt so ein großes proplem sein herrauszufinden was es macht.

@koksii wollte damit was machen hab mich dan dagegen entschieden^^

@Tumbleweed hab neu mit c++ angefangen von daher siehts halt so schlecht aus :D

@sxc
x==0.0;
Absichtlich ein Vergleich oder soll das eigentlich eine Zuweisung sein?
der variabel x sollte halt den wart 0 haben.

cin>>y&&ch;
Wie bitte was?

naja das programm soll bei einer zahl normal weiter machen und bei dem wort "end" aus der for schleife springen und deswegen cin ich 2 variabeln^^

for(a=2; a<1000000; a++)
Warum kein int in der For-Schleife, sondern eine zuvor deklarierte Floatvariable?
keine ahnung danke :)

erg = x+=y;
Was soll das zweite Gleichheitszeichen da?
naja ich kanns net genau beschreiben aber bringt auf jedenfall was würde ich nicht x+=y schreiben würde das programm immer den 1 deklariert x wert nehmen statt mit der davorigen ergebniss.

return 0;
system("PAUSE");
Die Pause nach dem Beenden des Programms? Sollte die nicht eher davor sein?

nope davor wird es ja automatisch pausiert weil das programm werte braucht aber ohne das system pause würde das programm am ende einfach zu gehn :)

@mrhanky01 Dann nimm deinen ganzen mut zusammen und bewerb dich da :)
 
Zuletzt bearbeitet:
Aye, sorgt aber für eine falsche Ausgabe, da bei den Werten x = 5 und y = 3 am ende ausgegeben werden würde, dass 8 + 3 = 8 wäre.
 
hmm ne bei mir läuft das programm bis auf den letzten teil halt erg übernimmt ja nur den wert von x+=y.
Hab ich so gemacht damit ich bei cout erg schreiben kann weil er nicht akzeptiert hat als ich da
cout" "<<x+=y; schreiben wollte :D
 
Bei
x += y;
weist du x den Wert von x + y zu.
Wieso nicht einfach
erg = x + y;
und dann so ausgeben, wie du es hast?
 
Ich versteh nicht, was du meinst, sxc.
Die Befehle werden alle der Reihe nach abgearbeitet. Wenn du jetzt x=5 und y=3 hast, dann rechnet der PC 5 + 3 = 8. Wenn du die gleiche Zeile dann nochmal aufrufst, rechnet er 8 + 3 = 11.
Edit: Wenn er erg = x +y schreiben würde, könnte er x nicht jedes mal um 3 erhöhen, da das ergebnis dann immer das gleiche wäre
du hast jetzt aber doch die x oder erg variable doppelt, du kannst auch einfach erg += y schreiben und x weglassen oder du schreibst x+= y und schreibst das x in cout (und nicht x+=y in cout, da du es ja eine zeile davor hast)
 
Zuletzt bearbeitet:
x = 5;
y = 3;
x = x + y;
erg = x;

daraus folgt der Zustand:

x = 8;
y = 3;
erg = 8;

Wenn nicht, sollte ich echt ins Bett.
 
ganz einfach würde ich
erg = x+y;
machen würde es so ausehen

15+10 = 25
15+20 = 35
15+15 = 30

und mit
erg=x+=y;
siehts so aus

15+10 = 25
25+20 = 45
45+15 = 60

also bei deiner methode würde er wie gesagt immer mit dem 1. x wert addieren das möchte ich aber nicht.
deswegen meine methode hierbei wird immer mit dem letzten ergebnis addiert :D

nope

x=5;
y=3;
erg= x+y;
erg=8;

:D

x+=y;
bedeutet nicht das x= x+y ist
 
Zuletzt bearbeitet:
ja, sxc, das ist so beabsichtigt, dass man das Ergebnis bekommt, wenn man so einen befehl schreibt. Wie gesagt, erg und x sind redundant und man kann eins davon einfach weglassen um ram zu sparen ;)
 
Elbrathil:
Das mit der Schleife hatte ich außer Acht gelassen und nur diese Zeile angeschaut, weil ich so eine Zuweisung bei so einer eigentlich einfachen Aufgabe seltsam fand; mit zwei Zuweisungsoperatoren.
Und genau das meinte ich. x und erg haben den selben Wert zugewiesen bekommen und es macht irgendwie keinen Sinn, dann auszugeben, dass
8 + 3 = 8
11 + 3 = 11
usw. ist.


erg = x+y;
cout<<" "<<x<<" + "<<y<<" = "<<erg<<endl<<endl<<endl;
x+=y;

würde doch dann insgesamt mehr Sinn machen.
 
Zuletzt bearbeitet:
Also das hier funzt bei mir einwandfrei:
Code:
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {

    float vorher= 0;
    float summand= 0;
    float ergebnis= 0;

    int i= 0;
    std::string input("");

    std::cout << "Gib die 1. Zahl ein:\t" << std::endl;
    std::cin >> ergebnis;

    for(i=2; i<1000000; i++) {
        vorher= ergebnis;

        std::cout << "Gib die " << i << ". Zahl ein:\t" << std::endl;
        std::cin >> input;

        if (input == "end") {
            break;
        }
        else {
            std::stringstream Str;
            Str << input;
            Str >> summand;
        }

        ergebnis+= summand;

        std::cout << " " << vorher << " + " << summand << " = " << ergebnis << std::endl << std::endl << std::endl;
    }

    return 0;
}
 
Ja, stimmt wohl.

das mit dem cin>>y&&ch versteh ich aber auch nicht mehr so ganz... C(++) ist bei mir schon ne weile her ^^ ich glaub aber dass das falsch geschrieben ist. Es sollen wohl 2 Zeichenketten eingelesen werden. Einmal y, eine zahl, und einmal eine andere zeichenkette (wo dann end drin stehen soll)
 
Zurück
Oben