C++ error C2143 Es fehlt ';'

hier sind die Fehler vorher rauskamen .


warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cout'


Das warnig ist natürlich immer noch da, das andere nich mehr .

- Andere veränderungen bezüglich der lesbarkeit usw. mahc ich noch ka wann .
 
Zuletzt bearbeitet:
Hi.
hier sind die Fehler :confused: bekomme sie nur nicht weg ....
Hast du die Fehlermeldungen denn mal gelesen?

C++:
cin >> x >> endl; // Zeile 18

Code:
1>c:\dokumente und einstellungen\rh\eigene dateien\visual studio 2005\projects\rabatt\rabatt\rechner.cpp(18) : error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'overloaded-function' akzeptiert (oder keine geeignete Konvertierung möglich)
In dieser Zeile ist ein Fehler wie der Compiler bereits bemängelt hat. Versuch doch einfach mal die eine Zeile zu verstehen - was soll das bedeuten? Du kannst doch nicht einfach irgendwelche Codeschnipsel einfach irgendwie zusammenfügen... Tipp: Wozu soll das endl gut sein?

Gruß

PS: Bitte lerne was Code Tags sind und verwende für Code immer die entsprechenden Code Tags! :google:
 
Hi.
Also: Erstens: void oder int main ist eigentlich egal
Falsch.
(zumindest bei Microsofts VC)
Das ist unwichtig.
bei int main muss aber am Programmende
return 0;
(oder eine andere Zahl außer Null) stehen
Auch falsch. Laut C++ und C Standard muss der Rückgabetyp von main int sein. Laut C++ und C99 Standard darf man die return 0; Anweisung in main auch weglassen.

Gruß
 
Ja Gelesen hatte ich es und den cin Fehler hatte ich auch schon weg gemacht !!
(!) Verstehen was cin macht und wie es geschrieben wird tue ich (!) auch wenns nicht so ausieht -.- .

Wohl das Falsche gespeicherte hochgeladen :-( Kommt davon wenn man unter Stress steht ^^.

Der Rest geht davon aber auch nicht weg .
Die endl; brauch man nicht aber ab und zu mach ich sie halt .

Es ist immer ein kleiner Fehler der alles zum Chaos macht und ich finde ihn nicht ( nie ) :X
 
Hi.

Bitte überarbeite deinen Beitrag und verwende die Code Tags! So sieht man da nicht durch. Ich werde jedenfalls nicht manuell die Zeilennummern rausfinden... :rolleyes:

Gruß
 
Hallo Freunde der Sonne :D


also falls du es noch nicht gelöst haben solltest :D hab mir deinen Code mal angeschaut.. also es fehlen hinter fast jeder Zuweisung ein ; und wenn du ein cout<<"TEST \n"; machst brauchst du das << dahinter nicht bzw. es bringt einen Fehler was bei dir ja dann der Fall war.

also sowas hier

Code:
cout<<"ER mit 19% Steuer \t"<<s<<"Euro\n\n"<<;

da kannst (bzw musst weil er sonst ja was erwartet) das << vor dem Semikolon weglassen

und eben die ; hinter deinen Zuweisungen.

hier nun der verbesserte Code falls überhaupt noch erwünscht^^

Code:
void main()
{
   float x,y,s,a,b;
   cout<<"Bitte Einkaufswert Eingeben und bestaetigen"<< endl;
   cin >> x;
   if (x<=500)
   {
      y=x*0.03;
      cout<<"3% Rabatt bei Einkaeufen unter 500Euro"<< endl;
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      cout<<"Einkaufswert \t"<<x<<"\n";
      cout<<"Rabatt \t"<<y<<"\n";
      a=x-y;
      cout<<"Neuer Wert ER\t"<<a<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      s=y+(y*0.19);
      cout<<"\n";
      cout<<"Steuer 19% \t"<<y*0.19;
      cout<<"ER mit 19% Steuer \t"<<s<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      b=s-(s*0.02);
      cout<<"\n";
      cout<<"Barzahlungs-Skonto 2% \t"<<s*0.02;
      cout<<"ERS mit B.-Skonto \t"<<b<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      cout<<"\n";
      cout<<"Zu Begleichender Betrag\t\t"<<b<<"Euro"<< endl;
   }
   else
   {
      cout<<"5% Rabatt bei Einkaeufen ueber 500Euro";
      y=x*0.05;
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      cout<<"Einkaufswert \t"<<x<<"\n";
      cout<<"Rabatt \t"<<y<<"\n";
      a=x-y;
      cout<<"Neuer Wert ER\t"<<a<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      s=y+(y*0.19);
      cout<<"\n";
      cout<<"Steuer 19% \t"<<y*0.19;
      cout<<"ER mit 19% Steuer \t"<<s<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      b=s-(s*0.02);
      cout<<"\n";
      cout<<"Barzahlungs-Skonto 2% \t"<<s*0.02;
      cout<<"ERS mit B.-Skonto \t"<<b<<"Euro\n\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<< endl;
      cout<<"\n";
      cout<<"Zu Begleichender Betrag\t\t"<<b<<"Euro"<< endl;
   }
}

der Rest sind Warnings wegen Konvertierung von Double zu Float ^^

greetz sand13r
 
Habs im Anfangs Post verbessert .
Hatte deinen Post noch gar nicht gesehen und das ganze selbst gemerkt ^^ ( das mit ; nach den Rechnungen )

:confused: Hatte ich irgendwo ein << vergessen ?


Danke für deine Antwort .
 
Hab mal wieder n Problem und bin mit Suchen auf nichts Hilfreiches gestoßen ..... Tja und nun seid ihr wieder dran ^^ .

Also es geht diesmal um Abfragen :
- cin soll kein Buchstabe sein
- was ich dazu gefunden habe ist das was unten steht

C:
if(cin.fail()) //while (!cin) while(cin.fail()) 
 {
	 cout<<"Falsche Eingabe\n\t Bitte eine zahl Eingeben!"<<endl;
cin>>x;
		 goto Hier;
 }

- Bei Zahlen funktionier das Programm
- Bei z.B "D" als Eingabe soll das cin.fail kommen ( Kommt auch :) ) Nur : (!)
- Das macht dan ne Endlosschleife trotz des goto , auch wenn ein neues cin vor dem goto steht und es schon längst nicht mehr fail ist .

C:
while(cin.fail())
{
cout <<"Ungueltige Eingabe"<<endl;
cin>>x;
}

- Das wollte auch nicht so recht das bringt auch nur ne Endlosschleife .

Macht mal Bitte was dageen :) PLZ ......
 
Zuletzt bearbeitet:
Eine Frage zu beiden Codeschnippseln.

Was willst du damit genau erreichen?

cin.fail() prueft nur ob ueberhaupt ein Zeichen eingegeben wurde, was zum Variablentyp passt. Dein Problem ist, dass du den Puffer nicht loescht und somit auch nachfolgend noch cin.fail den alten Zustand hat.

Nachfolgend mehrere Vorschlaege:

1. Eingabepruefungen werden im Allgemeinen mit Dauerschleifen implementiert.

Dauerschleife ist bsp. folgendes

Code:
while (1){
  if (...){
  } else 
  break;
}

in diesem Fall laeuft die Schleife genau solange wie der If-Fall vorliegt, notfalls bis ins Unendliche. sobald der Else-Fall eintritt wird die Schleife mit break verlassen.

2. Eine Eingabe auf korrekte Zeicheneingabe pruefen macht man normal, indem man auf den entsprechenden Ascii- oder Unicode des geforderten Zeichens ueberprueft.
Wichtig dabei ist, wenn die Eingabe falsch ist unbedingt den Eingabepuffer mit cin.clear() und darauffolgend einer cin.ignore() Kette loeschen, da sonst der Muell von der Vorherigen Eingabe noch drin steht (C/C++ hat keinen automatischen Muellentleerer eingebaut).

eine moegliche Sequenz waere besp:

Code:
cin.clean(); 
while (cin.tellg() > 0) cin.ignore;

cin.clear() setzt cin wieder in den Ausgangszustand, was den Fehlerspeicher fuer fail() etc loescht.

die Whileschleife prueft ob der Inhalt des gerade angeschauten Cin-Elements im Puffer gleich oder ungleich 0 ist. Ist es ungleich rutscht er eine Adresse hoeher etc pp, bis er an einen leeren Platz kommt. Ende vom Lied ist, dass du keinen alten Datenschrott mehr drin hast. Sowas ist immer nervig, wenn du ein Feld mit 30 Zeichen hast, aber nur 5 eingelesen werden. die restlichen 25 sind dann mit irgendwelchem Muell aber mit Nichten mit 0en gefuellt. Das kann zu erstaunlichen Ergebnissen fuehren.

3. Die Pruefung auf Zeichen. das macht eine If-Abfrage, die Prueft ob das Zeichen, oder bei einem String jedes eingegebene Zeichen den Anforderungen des Programmierers entspricht.

komplett koennte dass dann wie folgt aussehen: (aufgebaut fuer ne Zeichenkette, getline liesst ne Zeichenkette ein) (bsp fragt ab, ob Ziffern eingegeben wurden)

Code:
...

while (1) {
  cin.clean();
  while (cin.tellg() > 0) cin.ignore();           //alternativ fuer diese Zeile einfach cin.sync();
  cin.getline(var, 10);                                //Liesst die ersten 10 Zeichen der Tastatureingabe ein.
  for (int i=0; i<10; i++) {                          //laeuft die einzelnen Elemente der Eingabe durch.  
    if (var[i] >= '0' && var[i] <= '9') {             //Prueft ob Eingabe in Ascii-Tabelle zwischen 0 und 9 liegt, also Prueft auf Zahl
      cout << "korrekte Eingabe" << endl;
      break;
    }
  cout << "Eingabe falsch, bitte nocheinmal" << endl;
  }
}

*Irgendwie war ichjetzt wohl fuer die C++-Code-Darstellung zu bloed, aber was solls ... ;)
 
Zuletzt bearbeitet:
Danke für die Antwor werts mal Probieren .

Hab beim suchen nur Codes gefunden mit nem clear; drin bin irgendwie nicht darauf gekommen cin.clear oder so was daraus zu machen :) .


Em wenn man break setzt beendet das ja das Programm kann man das umgehen ,so das der wieder zum anfang kommt ?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück