Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.05.2006, 16:14

cin.get(); //wieso brauche ich es zweimal damit es reagiert

Hi

Hier erstmal der Quellcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <conio.h>      

using namespace std;

int main (void)

{
cout<<"wie schnell sind sie gefahren? ";
int gesch;
cin >> gesch;
cout << "die maximale Geschwindigkeit beträgt 60 km\n\n\n";
cin.get();
int limit = 60;
cin.get();
if (limit == gesch){
cout<<"sie fahren mit max. geschwindigkeit\n";
}

else{
cout<<"Error\n";
}
getch();
return 0;
}


Der Quellcode ist so einfach das ich dazu eigentlich nicht viel sagen muss ;)
Jedoch zu meiner Frage:
Wieso muss ich das cin.get() zweimal und genau an dieser Stelle schreiben damit es überhaupt funktiniert?
Wenn ich es nur einmal schreibe läuft das Programm genau gleich ab wie wenn ich es gar nicht geschrieben hätte ???

MfG Sämi

2

17.05.2006, 17:39

also erstens mal ist der code total unübersichtlich!

variablen gleichen zugriffsbereichs faßt man normalerweise am anfang des abschnitts zusammen.

ansonsten gilt das gleiche wie beim normalen text schreiben: sinnvolle abschnitte zu absätzen zusammenfassen.

so jetz zum problem: mach dir bevor du weitermachst erstmal die funktionsweise von cin und cin.get klar:
cin ließt solange zeichen ein bis zum ersten whitespace und
cin.get liest linienweise ein, allerdings brauch man eine speichervariable und eine maximale anzahl von zeichen

also mach die cin.gets einfach mal weg weil sie sowieso ohne parameter aufgerufen werden (ka was dann passiert) und du mit cin schon für die eingabe sorgst

3

17.05.2006, 17:58

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
#include <conio.h>      

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << "Wie schnell sind sie gefahren?\n"; 
    int iSpeed = 0; 
    std::cin >> iSpeed; 
    std::cout << "Die maximale Geschwindigkeit betr\x84gt 60 km\\h\n"; 
    int iLimit = 60; 

    if(iLimit == iSpeed)
        std::cout << "Sie fahren mit max. Geschwindigkeit\n"; 
    else if(iLimit <= iSpeed)
        std::cout << "Sie fahren " << (iSpeed - iLimit) << "km\\h zu schnell!";
    else if(iLimit > iSpeed)
        std::cout << "Sie k\x94nnen ihr Fahrtempo noch um " << (iLimit - iSpeed) << "km\\h erh\x94hen!";

    getch(); 

    return 0;
}
[/code]
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

J.M.K.

Alter Hase

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

4

17.05.2006, 18:00

Mal so eine Frage am Rande. Warum schreiben manche std:: ? Ist doch viel mehr zu schreiben als einmal using namespace std;
Vegetarier essen meinem Essen das Essen weg.

Phili

unregistriert

5

17.05.2006, 18:10

"namespace std" ist schlechter programmierstil(gabs doch schon oft genug ;) ).

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

17.05.2006, 18:15

1.) zur Frage:

get holt ein Zeichen (oder mehrere) aus dem Eingabepuffer, wenn dieser nicht geleert wurde, terminiert die erste get Funktion. Da der Buffer jetzt leer ist, wartet die zweite. Deswegen brauchst du zwo. Es geht aber viel einfacher, indem du den Puffer vorher löscht. (mit cin.ignore(); )

Hierzu: http://msdn2.microsoft.com/en-us/library/f5tsy854.aspx
und http://msdn2.microsoft.com/en-us/library/deyay500.aspx

2.) Threadinterne Frage, schon tausenmal beantwortet.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

7

17.05.2006, 18:15

Zitat von »"J.M.K."«

Mal so eine Frage am Rande. Warum schreiben manche std:: ? Ist doch viel mehr zu schreiben als einmal using namespace std;


:-D :-D Sorry, ich musste lachen. Was bringt es dir n bisschen Tipparbeit( :rolleyes: ) zu sparen wenn das Programm dann am Ende fehlerbehaftet ist? *gg*

J.M.K.

Alter Hase

Beiträge: 500

Wohnort: BW Karlsruhe Ittersbach

Beruf: Schüler

  • Private Nachricht senden

8

17.05.2006, 18:20

Ja in Ordnung. Bin schon wieder ruhig. :)
Vegetarier essen meinem Essen das Essen weg.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

9

17.05.2006, 18:27

Also tut mir leid wenn das harsch rüberkam, aber mal im Ernst, das ist doch kein Argument ..? using namespace xyz ist immer eine potentielle Fehlerquelle, warum sich einer solchen aussetzen?

Und mal abgesehen davon. Gib mal :: im Visual Studio ein. Dann kommt eine lange liste möglicher Funktionen etc. Ich finde das spart ne Menge Tipparbeit =)

Anonymous

unregistriert

10

17.05.2006, 19:03

Wegen 2x std::cin.get ();

Wenn Du eine Eingabe mit dem >> Operator betätigst, "fragmentierst" Du sogesehen den Eingabepuffer, den muß man bevor std::cin.get(); aufgerufen wird synchronisiert werden mit std::cin.sync ();

Grund: in der >> Eingabe war bereits ein Streamabschluss, also ein RETURN.

Werbeanzeige