Frage von Kruxiscast, 41

Brauche hilfe bei einem C++ Code.?

HEy ich bin noch in den C++ Basics und wollt aus dem FF eine wiederholung schreiben. Leider hab ich einen fehler der in der Console nen text loopt und ich weiß nicht woran es liegt. Hier der code:

#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
int main(){
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

a = true;

while(a){
         SetConsoleTextAttribute(handle, 10);
         
a = true;
cout << "Gib eine Zahl ein: " ;
cin >> a;

cout << "\nGib eine Zahl ein die dazugerechnet werden soll: ";
cin >> b;

i = a+b;

cout << "\nDas Ergebnis ist: " << i << endl << endl << "..." << endl << endl;


if (i == 1337)
{
      a = false;
}
}
b = true;
c = true;
int leet, Donnerstag;
Donnerstag == 1;
leet == 1;
while(b)
{ 
         d = true;
         while(d){
SetConsoleTextAttribute(handle, 3);
cout << "SOOO du bist also ein Elite Hacker? Wenn das so ist... \n\nWas ist die Antwort auf alles?" << endl << endl;
cin >> c;
if (c == 42)
{
      cout << "\nWow... du bist ja garnicht so doof wie du aussiehst! Nächste Frage.\n\nWas bedeutet 1337?" << endl << endl;
      cin >> d;
      
if (leet == leet)
{
      cout << "Das war Correct! Nun gut letzte frage. \n\nWelcher Tag ist heute?" << endl;
      cin >> e;
      if (e == 1)
      {
            cout << "Du hast es geschafft! Glückwunsch du bist ein Held!" << endl << endl;
            c = false;
}
}
}
}

while(c){    
cout << "Noob du bist es nicht würdig dieses Programm zu nutzen!\n\nWillst du es nochmal versuchen? 1 = Ja\n\n 2 = Nein\n\n\n" << endl << endl;
      cin >> e;
      if (e == 1)
      {
            b = true;
            c = true;
            d = true;
      }
      }
      
system("PAUSE");

return 0;
}
} 

Ich weiß der Text ist net schön aber bei:

cout << "\nWow... du bist ja garnicht so doof wie du aussiehst! Nächste Frage.\n\nWas bedeutet 1337?" << endl << endl;
  cin >> d;

if (d == leet)

fängt das programm an zu loopen. Wenn ich als input leet gebe wird der Frage text und der antwort Text iunendlich oft wiedergegeben. Woran liegt das was mach ich falsch?

Schonmal danke im vorraus =)

Antwort
von Scrummer, 31

Du setzt die Variable c weiter oben auf true. Dadurch wird dem while-loop der wert true übergeben und er wiederholt sich einfach die ganze zeit, da er nirgendwo auf false geändert wird.

Kommentar von Scrummer ,

achja, soviel ich weiss kannst du auch nicht einfach so eine boolean zu einem integer ändern, solang du im gleichen scope arbeitest.

Kommentar von Kruxiscast ,

Könntest du das mit dem Boolean und scope etwas näher erleutern?

c= true ist ja für dashier:

while(c){
cout << "Noob du bist es nicht würdig dieses Programm zu nutzen!\n\nWillst du es nochmal versuchen? 1 = Ja\n\n 2 = Nein\n\n\n" << endl << endl;
cin >> e;
if (e == 1)
{
b = true;
c = true;
d = true;
}

Aber das ist ja nicht der Text den er loopt

Kommentar von PWolff ,

Schau dir das Thema "Datentypen" noch mal von Anfang an an.

Die Schleife mit c wirst du nur deshalb noch nicht als Endlosschleife bemerkt haben, weil das Programm nicht bis dort kommt.

Mich wundert, dass das Ding überhaupt kompiliert - bei diesem Mangel an Semikola. Oder habt ihr eine C++-Variante, die da dem alten Internet-Explorer nacheifert - "Sch... auf Standards, hauptsache, der ahnungslose Anfänger ist glücklich"?

Übrigens ist die schwache Typisierung einer der Gründe, warum ich C++ nicht für anfängerfreundlich halte - bei Programmiersprachen mit "starker Typisierung" gibt es keine implizite Umwandlung z. B. von Integer zu Boolean, und der Compiler meckert, wenn man's versucht (zu Recht).

Kommentar von Kruxiscast ,

Alles klar. Ja die sache ist das ich nicht weiß womit ich sonst anfangen soll. Hab überlegt Ruby wieder anzufangen soll aber auch nicht so toll sein. Und wie gesagt ich lern die Basics heist was iostream macht was die befehle heißen was sie tun sollen etc. Dieses programm hat nur den sin das es abläuft, durch die ifs läuft und bei einer fehlerhaften antwort abbricht. EInfach als wiederholung des gelernten. Deswegen arbeit ich auch mit a,b,c,d weil ich nicht weiß was ich sonst nehmen soll.

Kommentar von PWolff ,

achja, soviel ich weiss kannst du auch nicht einfach so eine boolean zu einem integer ändern, solang du im gleichen scope arbeitest.

In C und C++ lässt sich jede Variable eines einfachen Typs als Boolean interpretieren, in C++ zusätzlich alle Zeiger. Soweit ich weiß, jede Variable überhaupt.

Und man kann ohne weiteres ein Boolean einem Integer zuweisen.

Kommentar von Kruxiscast ,

sowas wie bool a; ?

Antwort
von Kruxiscast, 29

ich hab nen fehler auversehen geschrieben undzwar if (leet == leet)

hab ich in if (d == leet) geändert so wie das erste e==1 zu e==Donnerstag. Zudem habe ich leet und Donnerstag == 1 gelöscht. ABer es geht trozdem nicht

Antwort
von triopasi, 17
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;

Was bitte soll das? Bennene deine Variablen doch mal. Und benutze a doch nicht als int und boolean. Was soll der Code eigentlich machen?? Der ist nen totalles Wirrwarr ohne jegliche Struktur.

Kommentar von Kruxiscast ,

Der code soll durchlaufen, bei richtigen Antworten in die nächste klammer rutschen und bei falschen unten bei while(c) ankommen. Er ist da um ne kleine Wiederholung zu machen da ich, wie schon erwähnt, noch blutiger Anfänger bin und grade die Funktionen lerne. Das heist von Style und Typisierung hab ich noch keine ahnung.

Antwort
von ralphdieter, 6

Sorry, falsch gelesen...
___________________

a = true;
while(a){

Da du a in der Schleife nicht änderst, läuft sie endlos weiter...

Kommentar von ralphdieter ,

Ich habe den Code erstmal richtig eingerückt, damit man sieht, wo die Schleifen aufhören.

Aus dem while(d) kommst du nur heraus, wenn du c=42 und d=0 eingibst. Dann ist aber c==true und das folgende while(c) geht endlos.

Mit der "richtigen" Eingabe d=1 setzt du zwar c=false, aber dann hängst du in der while(d)-Schleife.

Manchmal hilft es, seinen Code zu strukturieren. Mit einer Funktion

int prompt(char const *frage)
{
int zahl;
cout >> endl >> frage >> ' ';
cin >> zahl;
return zahl;
}

schrumpft dein Programm auf wenige Zeilen zusammen:

do{
 int zahl=prompt("Gib eine Zahl ein:");
}while (
!(1337-zahl==prompt("Gib eine Zahl ein die dazugerechnet werden soll:")
&& 42==prompt("Was ist die Antwort auf alles?")
&&  1==prompt("Was bedeutet 1337?")
// weitere Fragen...
&& cout << "Du hast es geschafft! Glückwunsch du bist ein Held!")
)
 && 1==prompt("Willst du es nochmal versuchen? 1 = Ja\n\n 2 = Nein")
);



Antwort
von Kiboman, 16

dein code ist der wahnsinn :))

wie kann man bitte mot a,b,c,d arbeiten?

kein winder das du den durchblick verlierst.

eine variable die leet heißt ist auch nicht besser,

sei nicht so tipp faul und gebe den ordentliche namen.

zu dem code Inhalt sag ich erstmal nichts bis ich mir das am pc angeguckt habe.

Kommentar von Kruxiscast ,

Die sache ist (wie schon beschrieben) ich bin noch in den Basics. Heißt ich lerne was verschiedene funktionen machen und wie sies machen. Daher ist klar das ich als blutiger Anfänger mit a,b,c,d arbeite. Und dah ich das alleine lerne hab ich auch niemanden der mir das erklärt.

Kommentar von Kruxiscast ,

Also soll ich eher "int rechner;" und bei der ersten abfrage (gib eine zahl ein) die schleife while(rechner) benennen?

Kommentar von Kiboman ,

grade als anfänger solltest du nicht mit a b c d arbeiten,

das ist eine gaaaanz schlechte angewohnheit die nur auf schreibfaulheit zurück zuführen ist.

es zieht die lesbarkeit total runter.

für deine code gibt es andere möglichkeiten die die lesbarkeit enorm erhöhen.

für mich am handy aber schlecht darzustellen.

benenne die variablen danach was sie beinhalten oder machen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten