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

Mephisto

Frischling

  • »Mephisto« ist der Autor dieses Themas

Beiträge: 57

Wohnort: Passau

Beruf: Schüler

  • Private Nachricht senden

41

05.07.2010, 15:04

Und wieder einmal steh ich vor einem Problem (will dafür nicht extra nen neuen Threat aufmachen).

Zuerst mal meinen Quelltext:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>

using namespace std;

int main()
{
    struct S_Spieler
    {
        char Name[30];
        int Team;
    };

    S_Spieler Spieler1;
    S_Spieler Spieler2;
    S_Spieler Spieler3;
    S_Spieler Spieler4;


    //Eingabe der Daten


    //Spieler 1
    cout << "Spieler 1: " << endl;
    cout << "Name: ";
    cin.get (Spieler1.Name, 29);
    cin.ignore();

    do
    {
        cout << "Bitte Team waehlen: ";
        cin >> Spieler1.Team;
    } while (Spieler1.Team < 1 || Spieler1.Team >2);

    //Spieler 2
    cout << "Spieler 2: " << endl;
    cout << "Name: ";
    cin.get (Spieler2.Name, 29);
    cin.ignore();

    do
    {
        cout << "Bitte Team waehlen: ";
        cin >> Spieler2.Team;
    } while (Spieler2.Team < 1 || Spieler2.Team > 2);

    (...)



So. Wenn ich jetzt das Programm ausführe, gebe ich zuerst meinen Namen ein. Da klappt auch alles. Dann heißt es "Bitte Team wählen".

Wenn ich jetzt z.B. Team 5 wähle, komme ich wie gewollt in die Schleife rein, dass ich so oft eine Zahl eingeben soll, bis sie entweder 1 oder 2 ist. (Team 1 oder 2).
Wenn ich jetzt aber eine der zwei obigen Zahlen eingebe, hängt sich mein Programm auf. D.h. es wird unendlich oft "Bitte Team wählen" geschrieben, ohne, dass ich eine eingabe tätigen kann.
Meiner Idee nach müsste ich doch aus der do/while-Schleife rauskommen, sobald ich eine Eingabe mache, die entweder 1 oder 2 ist?!?
Das Leben ist ein scheiß Spiel,
Aber die GRAFIK ist geil!!!

42

05.07.2010, 15:13

Also: 1. Deklarier deine Struktur ausserhalb des Bodys der main-Funktion.
2. Es heißt Thread mit d ;)
3. zu deinem Problem:
hm, scheint wohl ein Problem mit cin zu sein.
4. Du könntest ruhig mal einen neuen Thread eröffnen.

Mephisto

Frischling

  • »Mephisto« ist der Autor dieses Themas

Beiträge: 57

Wohnort: Passau

Beruf: Schüler

  • Private Nachricht senden

43

05.07.2010, 15:19

1. Im Buch werden sie innerhalb den Mainfunktion deklariert. Ich werde mich wohl vorerst am Buch halten
2. Ich werds mir merken
3. das hilft mir leider auch nicht weiter
4. nächstes mal :P
Das Leben ist ein scheiß Spiel,
Aber die GRAFIK ist geil!!!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

44

05.07.2010, 16:05

dieser fehler dürfte nur auftreten wenn du auch falsche eingaben machst.
benutz mal cin.sync() an stelle von cin.ignore() dann sollte es gehen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Mephisto

Frischling

  • »Mephisto« ist der Autor dieses Themas

Beiträge: 57

Wohnort: Passau

Beruf: Schüler

  • Private Nachricht senden

45

05.07.2010, 16:26

Selbes ergebnis, wie bei cin.ignore() :(
Das Leben ist ein scheiß Spiel,
Aber die GRAFIK ist geil!!!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

46

05.07.2010, 16:52

achja cin.getline an stelle von cin.get...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Mephisto

Frischling

  • »Mephisto« ist der Autor dieses Themas

Beiträge: 57

Wohnort: Passau

Beruf: Schüler

  • Private Nachricht senden

47

05.07.2010, 17:11

(...)\strukturen.cpp(26): error C2661: 'std::basic_istream<_Elem,_Traits>::getline': Keine überladene Funktion akzeptiert 0 Argumente
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]

:( :( :(

dennoch danke für deine Hilfe. Sonst noch wer ne Idee?
Das Leben ist ein scheiß Spiel,
Aber die GRAFIK ist geil!!!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

48

05.07.2010, 17:14

wer sagt denn, dass du 0 argumente übergeben sollst?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Mephisto

Frischling

  • »Mephisto« ist der Autor dieses Themas

Beiträge: 57

Wohnort: Passau

Beruf: Schüler

  • Private Nachricht senden

49

05.07.2010, 17:22

Ich hab keine Ahnung.

Ich hab einfach nur cin.ignpore() mit cin.getline() ersetzt...

Hier nochmal die "aktuelle" Version:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>

using namespace std;

int main()
{
    struct S_Spieler
    {
        char Name[30];
        int Team;
    };

    S_Spieler Spieler1;
    S_Spieler Spieler2;
    S_Spieler Spieler3;
    S_Spieler Spieler4;


    //Eingabe der Daten


    //Spieler 1
    cout << "Spieler 1: " << endl;
    cout << "Name: ";
    cin.get (Spieler1.Name, 29);
    cin.getline();

    do
    {
        cout << "Bitte Team waehlen: ";
        cin >> Spieler1.Team;
    } while (Spieler1.Team != 1 && Spieler1.Team != 2);

    //Spieler 2
    cout << "Spieler 2: " << endl;
    cout << "Name: ";
    cin.get (Spieler2.Name, 29);
    cin.getline();

        (...)
Das Leben ist ein scheiß Spiel,
Aber die GRAFIK ist geil!!!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

50

05.07.2010, 17:25

achja cin.getline an stelle von cin.get...


ach mir reichts. entweder liest du richtig oder du lässt es sein.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige