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

06.06.2013, 16:11

c++ 2 kleine Fragen

Hallo,
Habe zwei kleine fragen:
1. Wenn ich eine do while schleife habe, kann ich statt

C-/C++-Quelltext

1
2
3
4
do{


}while (bedingung 1 ist erfüllt && bedingung 2 erfüllt);


auch einfach

C-/C++-Quelltext

1
2
3
4
5
do{



} while(true);


schreiben ?
Weil sonst muss ich ja immer beispielweise in einer switch verzweigung schreiben "}while(Variable == 1 || Variable == 2 || Variable == 3.....) " schreiben,
und geht das nicht indem ich einfach "}while(true)" schreibe, dass ich dem compiler sozusagen sage dass eine "variable" erfüllt wurde ?
2. Frage
was meinen diese operatoren hier genau

C-/C++-Quelltext

1
2
3
*=
+=
.....



Habe schon danach gegoogelt allerdings nix gefunden ... kann mir das einer erklären ?
lg

2

06.06.2013, 16:16

1) Nein kannst du nicht. true = 1

C-/C++-Quelltext

1
while(true) //Solange true true ist, durchläufst du mal die Schleife hier

Woher soll der Compiler btw wissen, welche Variablen du abgleichen willst?
Schreibarbeit ist hier nicht Schreibarbeit, sondern wichtig für den logischen Kausalzusammenhang aus der Sicht des Compilers.

2)

C-/C++-Quelltext

1
2
3
4
5
6
7
int bla=4;
bla*=5;
//Ausgabe: 20

int bla=4;
bla = bla*5;
//Ausgabe: 20

Es ist also in dem Fall eine Verkürzung des Schreibens, willst du auf eine Variable irgendwas addieren und soll die Variable selbst den Wert wieder annehmen, so ists einfacher += zu schreiben, als es mit foo=foo+5 zu machen.

Noch Fragen? :)

MfG
Check

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

3

06.06.2013, 16:16

while(true) ist IMMER erfüllt, d. h. die Schleife wird endlos weiterlaufen, solange sie nicht innerhalb beendet wurde. Was das mit switch zu tun hat verstehe ich nicht ganz.

*=, +=, -= und /= sind Abkürzungen für eine Zuweisung und eine mathematische Operation.

C-/C++-Quelltext

1
2
x = x + 5; // x += 5;
x = x * 5; // x *= 5;

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

06.06.2013, 17:00

Vor allem wenn man C++ lernt ist ein gutes Lehrbuch meiner Meinung nach unabdingbar. Falls so ein solches noch nicht besitzt lege ich dir ans Herz dir eins zu besorgen. Was eine Do - While Schleife und Switch - Case miteinander gemeinsam haben weiß ich nicht. Du könntest natürlich folgendes machen:

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
bool a = false;
bool b = false;
bool c = false;
do
{
    switch(a)
    {
        case true:
            break;
    }
    switch(b)
    {
        case true:
            break;
    }
    switch(c)
    {
        case true:
            break;
    }
}
while(true);

Wenn eine der 3 Variablen true ist (a, b oder c) dann bricht die schleife ab. Einfacher und vor allem weniger Schreibarbeit wäre allerdings die normale Schreibweise:

C-/C++-Quelltext

1
2
3
4
5
6
7
bool a = false;
bool b = false;
bool c = false;
do
{
}
while(a == true || b == true || c == true);

Und auch das geht noch kürzer:

C-/C++-Quelltext

1
2
3
4
5
6
7
bool a = false;
bool b = false;
bool c = false;
do
{
}
while(a || b || c );


Was du sonst mit switch und while möchtest weiß ich nicht. Wobei ich die hier gezeigte erste Möglichkeit schon sehr abstrus finde. Wie du siehst ist die letzte die einfachste und benötigt am wenigsten Schreibarbeit.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

06.06.2013, 17:26

Mache es nicht wie in Schorschs erstem Beispiel. Das Break springt nur aus dem Switch. Damit erhältst du eine Endlosschleife.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

6

06.06.2013, 17:42

Mal wegen des benötigten zusammenhangs der code für welches ich die switch verzweigung in eine schleife gepackt habe :

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
int main(){

    char ampel;
    char exit;

    do
    {
    system("cls");
    drawSpaces();
    cout << " Ampelfarbe(RGK): ";
    ampel = getche();
    drawSpaces();
    switch(ampel){
                
    case 'R':       cout << " Die Ampel ist rot. "          << endl;
                    cout << " Anhalten! "                   << endl;
                       cout << " Programm verlassen (j/n)? ";
                       cin >> exit;
                       if(exit == 'j'){
                    cout << " Programm wird beendet ... ... ... ";
                       Sleep(5000);
                       return 0;
                       }
                       else{
                    break;
                       }
    case 'G':       cout << " Die Ampel ist gelb. "         << endl;
                    cout << " Zum Anhalten bereit machen! " << endl;
                       cout << " Programm verlassen (j/n)? ";
                       cin >> exit;
                       if(exit == 'j'){
                       Sleep(5000);
                       return 0;
                       }
                       else{
                    break;
                       }
                    break;
    case 'K':       cout << " Die Ampel ist gruen. "        << endl;    
                    cout << " Fahren sie! "                 << endl;
                    cout << " Programm verlassen (j/n)? ";
                       cin >> exit;
                       if(exit == 'j'){
                       Sleep(5000);
                       return 0;
                       }
                       else{
                    break;
                       }
    default:        cout << " Ungueltige Eingabe"           << endl;
                    cout << " Programm verlassen (j/n)? ";
                       cin >> exit;
                       if(exit == 'j'){
                       Sleep(5000);
                       return 0;
                       }
                       else{
                    break;
                       }
                };
    }while(true);
    
    getchar();

    return 0;

}



sprich ich möchte dem benutzer auch die möglichkeit geben, mindestens alle 3 ampelfarben"texte" ausgeben zu lassen, beenden kann er dann in jedem fall (rot, gelb oder grün) selbst. Deswegen geht für mich while(true) schon, da wenn ich beispielsweise ein U eingebe, kommt "ungültige eingabe, programm beenden?"
und das ist letztendlich was ich mit dem programm tun möchte.

C-/C++-Quelltext

1
while(true) //Solange true true ist, durchläufst du mal die Schleife hier

Woher soll der Compiler btw wissen, welche Variablen du abgleichen willst?
Schreibarbeit ist hier nicht Schreibarbeit, sondern wichtig für den logischen Kausalzusammenhang aus der Sicht des Compilers.

2)

C-/C++-Quelltext

1
2
3
4
5
6
7
int bla=4;
bla*=5;
//Ausgabe: 20

int bla=4;
bla = bla*5;
//Ausgabe: 20

Es ist also in dem Fall eine Verkürzung des Schreibens, willst du auf eine Variable irgendwas addieren und soll die Variable selbst den Wert wieder annehmen, so ists einfacher += zu schreiben, als es mit foo=foo+5 zu machen.

Noch Fragen? :)

MfG
Check
1) siehe oben erklärung
2) OK thx für die erklärung dachte ich mir eig schon dass es nur eine verkürzung ist.
while(true) ist IMMER erfüllt, d. h. die Schleife wird endlos weiterlaufen, solange sie nicht innerhalb beendet wurde. Was das mit switch zu tun hat verstehe ich nicht ganz.

*=, +=, -= und /= sind Abkürzungen für eine Zuweisung und eine mathematische Operation.

C-/C++-Quelltext

1
2
x = x + 5; // x += 5;
x = x * 5; // x *= 5;
siehe oben erklärung

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

06.06.2013, 18:34

Kleine Anmerkung am Rande: Ich würd in dem Fall dann zu einer normalen while-Schleife greifen anstatt einer do-while-Schleife... ;)

Volker_Neff

Treue Seele

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

8

06.06.2013, 19:14

Wo liegt eigentlich der Vorteil einer do Schleife gegenüber einer While Schleife?

9

06.06.2013, 19:35

hallo

der unterschied liegt in der anfangsbedingung. vorteil? anders!

chrische

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

10

06.06.2013, 20:32

Err, wut?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// Das da:
do {
  stuff();
} while(other_stuff);

// ... tut das gleiche wie:
stuff();
while(other_stuff) {
  stuff();
}
Erspart in seltenen Fällen Doppelcode. Warum verwendest Du eigentlich "getch", wenn du doch std::cin hast? std::cin ist da wesentlich feiner. Und so als Hinweis: Schau Dir mal std::exit an (Wurde doch auch in std importiert?). Dann kannst Du das ewig wiederholte "Beenden? (j/n)"-Zeug in eine eigene Funktion pressen.

@Steef:
Stimmt, er müsste "goto hell;" verwenden. :3

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige