Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » ganz einfaches Programm,finde den Fehler nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.04.2009, 13:38 Uhr
ToniKukoc



allo,es ist ein ganz einfaches Programm soll nur folgendes ausgeben:

Sie werden aufgefordert zwei int-Zahlen über die Tastatur einzugeben. Diese sollen zwei unterschiedlichen Variablen zugewiesen werden.
Danach sollen die zwei eingegebenen Werte ausgegeben werden.
Zuletzt werden die Variableninhalte vertauscht und erneut ausgegeben.

Könnte sich auf dem Bildschirm darstellen:

Bitte Zahl fuer i eingeben:13
Bitte Zahl fuer j eingeben: 50
i hat den Wert 13
j hat den Wert 50
i hat jetzt den Wert 50
j hat jetzt den Wert 13



Was ist an folgendem Code falsch?


C++:
#include <iostream>
#include <climits>
using namespace std;

int main() {
int i;
int g;
cout << "Bitte zahl für i eingeben:";
cin >> i;
cout << "Bitte Zahl für g eingeben:";
cin >> g;
cout << " i ist jetzt "<< i << " und g ist jetzt" << g << endl;
cout << " i ist jetzt "<< g << " und g ist jetzt" << i << endl;

getchar();
return 0;
}






Das Programm schließt immer nach der Eingabe der 2 zahlen



Vielen Dank im vorraus

Dieser Post wurde am 15.04.2009 um 08:29 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.04.2009, 15:00 Uhr
Pler
Einer von Vielen
(Operator)


Gar nichts. Wahrscheinlich wird das letzte getchar() mit einem Newline aus der Eingabepuffer gefüllt. Somit ist es in Deinem Sinne wirkungslos. Wenn Du das Programm richtig in der Konsole startest, wird es funktionieren.

Ansonsten: Welche Entwicklungsumgebung nutzt Du?

(Allerdings frage ich mich, ob das mit dem Austauschen wirklich so gedacht war)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.04.2009, 15:12 Uhr
ToniKukoc



Benutze bloodshet dev cpp
Auch wenn es nicht so gedacht war müsste das Programm trotzdem funktionieren,tut es aber nicht,auch wenn ich getchar weglasse.
Woran liegt das?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.04.2009, 15:46 Uhr
Pler
Einer von Vielen
(Operator)


Jetzt hast du mich falsch verstanden. Ich habe nicht gesagt, dass es am getchar() liegt. Aber wenn Du es unbedingt so willst, dann fehlt eher noch eins.

Aber eigentlich: Die Ausgabe ist da. Du siehst sie nur nicht, weil Deine Entwicklungsumgebung das Fenster gleich wieder schießt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.04.2009, 08:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Naja, was Pler meint ist folgendes:


Du gibst eine Zahl ein drückst Enter -> das cin liest die zahl aus, lässt das Enter aber drin im Eingabepuffer.
Das wiederholt sich für das zweite cin. Nun kommt er in die Funktion "getchar" - sieht "oh - ich hab ja noch ein Zeichen (das Enter) im Eingapepuffer - liest das aus -> schwupp "läuft" über das getchar hinweg und beendet das programm = fenster schließt sich.

Sinnvoller ist es meist sowas in der Art zu machen:


C++:
...
#include <sstream>
...

string s;
stringstream sr;

...

// cin >> i;
getline(cin, s); // komplette Zeile einlesen
sr.str(s);
sr >> i; // int rauslesen
...

// cin >> g;
getline(cin, s); // komplette Zeile einlesen
sr.str(s);
sr >> g; // int rauslesen





so bleibt nichts im Eingabepuffer, und wenn man keine Zahl eingibt kann man das z.b korrekt abfangen:


C++:
do {
  cout << "Bitte zahl für i eingeben: ";
  // cin >> i;
  getline(cin, s); // komplette Zeile einlesen
  sr.str(s);
} while( ! (sr >> i) );


die Schleife läuft dann solang, bis er eine Zahl einlesen kann, alles andere wird dadurch ignoriert.

z.b


Code:
Bitte zahl für i eingeben: ABCD              (falsch)
Bitte zahl für i eingeben: asdasd15432dasd   (falsch)
Bitte zahl für i eingeben: 51                (in ordnung, weiter mit g)

Bitte Zahl für g eingeben:
...


--
class God : public ChuckNorris { };

Dieser Post wurde am 15.04.2009 um 08:38 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: