Aktuell: Richtige Schleife wählen?; Alt: Fehlerquelle gesucht



  • Mit "Befehl in der Console" meinst du die Bedienung deines Programms?

    Setz den zu wiederholenden Teil deines Programms in eine Endlosschleife, die du verlässt, wenn der Benutzer die Eingabe zum Beenden macht.



  • Ja genau, meinte natürlich die Bedienung des Programmes.

    Super, werde ich gleich mal testen, bzw. googeln wie ich das anstelle.

    Und noch eine Frage zu diesem Programm, besser gesagt zu endl. endl steht ja für endline, wie ich mitbekommen habe. Ist das Richtig?

    Zum ersten cout:
    endl steht am Ende um eine neue Zeile anzufangen?

    Zum zweiten cout:
    Wieso steht hier bereits zwei mal endl, vor der Zeichenkette? Das macht für mich keinen Sinn, wenn meine Vermutung zum ersten cout richtig wäre. Könnte man es dann theoretisch nicht einfach weglassen und nur am Ende schreiben?

    #include <iostream> 
    
    using namespace std; 
    
    int main() 
    { 
        int z,x,y,Test;
    
        cout << "Bitte geben Sie eine Zahl ein: " << endl;
    
        cin >> z;
    
        cout << endl << endl << "Bitte geben Sie eine zweite Zahl ein: " << endl;
    
        cin >> x;
    
        y = Test = ((z + x) * x) + 5;
    
        cout << "y hat den Wert: " << y << endl;
    
        return 0; 
    }
    


  • Ähm ... oder meinst Du wie Du dein Programm startest? 😕

    Du hast ja am Ende eine .exe Datei erzeugt, wenn das Kompilieren und Linken funktioniert hat. Die musst du einfach in der Konsole starten. Standardmässig sollte die in dem Debug-Ordner deines Projekts erstellt werden. 🤡



  • Danke für die Antwort ExeStarter 🙂
    Wie ich das Programm starte habe ich zum Glück schon herausgefunden hehe



  • Con5ti schrieb:

    endl steht ja für endline, wie ich mitbekommen habe. Ist das Richtig?

    endl macht zwei Dinge. Es bewirkt einen Zeilenvorschub, und es sorgt dafür, dass zwischengespeicherte Daten auch wirklich geschrieben werden (flush). Ersteres erreicht man auch durch die Ausgabe von \n, letzteres ist hier unnötig.

    Con5ti schrieb:

    Zum zweiten cout:
    Wieso steht hier bereits zwei mal endl, vor der Zeichenkette? Das macht für mich keinen Sinn, wenn meine Vermutung zum ersten cout richtig wäre. Könnte man es dann theoretisch nicht einfach weglassen und nur am Ende schreiben?

    Der Zeilenvorschub erzeugt eine Leerzeile. Es ist schon ein Unterschied, ob du vor oder nach dem Text zwei Leerzeilen erzeugst.



  • Danke MFK für deine erneute Hilfe 🙂
    Hatte diese Erklärung zwar schoneinmal gelesen, dachte aber dass es nur für ein gewisses Beispiel galt.
    Habe es jetzt in der Praxis angewendet und verstehe es 🙂

    Da kommt auch schon eine neue Frage auf.

    Ich habe eben ein Programm, sagen wir x, nach Tutorial geschrieben und konnte dieses auch problemlos debuggen und öffnen.

    Daraufhin habe ich das nächste Program, ich nenne es einmal y, geschrieben.

    Um Programm y zu schreiben, habe ich den Code aus Programm x einfach gelöscht und somit in ein und der selben Datei geschrieben.

    Als ich y debuggen und starten wollte, wurde aber x geöffnet.

    Woran liegt das? Habe y abgespeichert und damit wäre doch der "alte" Code von x überschrieben oder nicht?

    Danke sehr schonmal



  • Hast du das Programm denn auch neu erstellt?



  • Ja, habe es zuerst nur mit überschreiben probiert und dann nocheinmal indem ich eine neue.cpp datei erstellt habe



  • Con5ti schrieb:

    Ja, habe es zuerst nur mit überschreiben probiert und dann nocheinmal indem ich eine neue.cpp datei erstellt habe

    Ich meine: Hast du aus der .cpp-Datei eine neue .exe-Datei erstellt?

    Strg+Umschalt+B



  • Danke, der Befehl war mir unbekannt 🙂

    Ich habe eben den Code aus dem Tutorial kopiert, und durch den meinigen ersetzt. Das hat auch geklappt. Wird dadurch automatisch eine neue .exe-datei erstellt?



  • Con5ti schrieb:

    Ich habe eben den Code aus dem Tutorial kopiert, und durch den meinigen ersetzt. Das hat auch geklappt. Wird dadurch automatisch eine neue .exe-datei erstellt?

    Durch das Ersetzen des Codes? Nein.

    Du kannst einstellen, ob beim Debuggen oder Ausführen das Programm automatisch neu erstellt werden soll.



  • Guten Abend, ich bin gerade dabei ein einfaches Programm zu schreiben für das ich vermutlich eine Schleife brauche.if else,while, do while, for..... Ich bin ziemlich verwirrt, da es so viele Möglichkeiten gibt und weiß nicht weiter.

    Ich möchte kurzerhand erklären was ich vor habe und werde es an meinem bis jetzt geschriebenen Code erläutern.

    Das Programm soll einem Spiel dienen und die "Macht" meiner Truppen errechnen. Diese wird anhand von Anzahl * "Macht"(4,16,24) der Truppen errechnet.
    Es gibt 5 verschiedene Typen von Truppen, in meinem Programm habe ich bis jetzt nur 3 aufgelistet(T1,T2,T3).

    Die Sache ist, ich möchte haben, dass man zuerst die Anzahl seiner T1 Truppen eingeben kann.Und dies mehrere Male hintereinander BIS man 0 eingibt und somit zu T2 kommt. Es ist mir gelungen durch die Eingabe von 0 zu T2 zu kommen. Was mir bisher nicht gelungen ist, dass ich z.b. bei T1 "1000" eingebe und daraufhin nocheinmal eine Zahl für T1 eingeben kann, bis ich eben 0 wähle.
    Das gleiche würde dann ja auch für den Rest gelten.
    Könntet ihr mir einen Tipp geben welche Schleife ich benutzen muss? Ich verlange jetzt von niemandem das Programm zu schreiben da ich es selber lösen möchte 😉
    Und wie würde ich das mit den variablen machen? Es könnte dann ja theoretisch a-z und noch mehr geben. Kann man diese auch a1,a2,a3..,b1,b2,b3,.. usw benennen oder gibt es hierfuer eine einfachere Variante?

    Vielen Dank schoneinmal, ich hoffe dass die Erklärung verständlich war

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int a,b,c,d,test;
    
    	cout << "Gib bitte die Anzahl deiner T1 Truppen ein: " << endl;
    	cin >> a;
     //Dies soll wiederholt werden, bis a == 0.
    
    	if (a == 0)
    // Könnte ich hier ein else setzen und den oberen Befehl nocheinmal wiederholen?
    
    	{
    		cout << " Gib bitte die Anzahl deiner T2 Truppen ein: " << endl;
    		cin >> b;
    //Dies soll wiederholt werden, bis b == 0.
    
    	if (b == 0 )
    
    	{
    
    		cout << "Gib bitte die Anzahl deiner T3 Truppen ein: " << endl;
    		cin  >> c;
    //Dies soll wiederholt werden, bis b == 0.
    	if (c == 0 )
    
    	z = test = (a*4 + b * 16 + c *24);
    
    	cout << "Die Macht deiner Truppen beträgt: " << z <<  endl;
    
    	}
    	}
    
    	cin.clear();
            cin.ignore(cin.rdbuf()->in_avail());
    	cin.get(); 
    
    	return 0;
    
    }
    


  • Drei Dinge bitte beachten:
    * Aussagekräftige Thread-Titel. "Angänger braucht bitte Hilfe" sagt uns nicht sehr viel.
    * Bitte Code-Tags verwenden.
    * Bitte Hirn einschalten vor dem Posten. In den von dir kopierten Fehlermeldungen kommt ca. 1000x mal "Operatoren.cpp" vor. Da dir offenbar der Hinweis darauf gereicht hat, dass die Fehler aus "Operatoren.cpp" kommen, kann man nur davon ausgehen dass du nichtmal eine der Fehlermeldungen aufmerksam gelesen hast. (Falls du doch ernsthaft versucht haben solltest selbst rauszubekommen was schief geht, und es einfach ein "sehe Wald vor lauter Bäumen nicht" Falls war, dann vergiss diesen Punkt einfach.)



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @hustbaer

    Danke für die Tipps. Habe mich bemüht die einzelnen Punkte zu bearbeiten und werde es mir in Zukunft zu Herzen nehmen.
    Nur beim Titel bin ich mir nicht sicher. Ist dieser jetzt besser? Da ich nicht die ganze Zeit einen neuen Thread eröffnen will habe ich mir gedacht, sowohl das ältere alsauch das aktuelle Thema in den Titel aufzunehmen.

    Ich muss zugeben, dass ich mich nicht auf den Pfad konzentriert habe, sondern eher auf die Fehlermeldungen(Syntaxfehler, Fehlender Typspezifizierer) geachtet habe. Auch den Pfad werde ich in Zukunft berücksichtigen 😉

    @forumtbot

    Danke fürs verschieben und sry für die falsche Wahl

    Wünsche euch allen einen angenehmen start in den Tag



  • Könntet ihr mir einen Tipp geben welche Schleife ich benutzen muss? Ich verlange jetzt von niemandem das Programm zu schreiben da ich es selber lösen möchte 😉
    Und wie würde ich das mit den variablen machen? Es könnte dann ja theoretisch a-z und noch mehr geben. Kann man diese auch a1,a2,a3..,b1,b2,b3,.. usw benennen oder gibt es hierfuer eine einfachere Variante?

    Nur while, do-while und for sind schleifen. If/else sind abfragen.
    for eignet sich in deinem fall nicht wirklich, for-schleifen nur zum hoch oder runter zählen gemacht sind.
    eine while schleife prüft erst die Bedingung, und führt dann Code aus, bei einer do-while schleife wird erst Code ausgeführt und dann eine Bedingung geprüft.

    Ich würde vorschlagen, um Sicher zu stellen das du es Verstanden hast, solltest du mal 1 kleines bsp für jede Schleife hier posten. z.B. das keine 1x1 kann man mit jeder dieser Schleifen programmieren.

    Sobald du das raus hast kannst du dich deinem Spiel widmen. Alles andere würde wohl nur Furst verursachen.

    EDIT:
    Das Zauberwort für deine vielen Variablen ist Array.

    Bitte denke an sprechende Namen. a1 oder T1 ist nicht sprechend.
    Und beschäftige dich erstmal mit den Schleifen. die Arrays kann man dann angehen.



  • Danke Sqwan, für den Post und die kurzen Erläuterungen 🙂

    Ich werde mich gleich einmal hinsetzen und versuchen das 1x1 mit jeder dieser Schleifen zu schreiben. Danach werde ich die Ergebnisse hier posten.

    Hehe, das mit den Arrays hatte ich vermutet, habe da ein Beispiel gemacht aber wohl nicht ganz verstanden. Zuerst setze ich mich mal mit while, do-while und for auseinandern und später widme ich mich dem Array 🙂



  • Tut mir Leid, dass ich mich schon wieder wegen so einer Kleinigkeit melde...

    Habe eben mit der while Schleife begonnen und nocheinmal das Zählen von Anfang an angefangen. Es wird Debugt, zeig mir keine Fehler an und startet auch die Konsole.
    Doch es wird nicht gezählt, sondern nur die leere Konsole angezeigt.
    Bin den Code zig Mal durch gegangen, aber ich kann keinen Fehler finden... i++; sollte doch der Befehl sein den Wert um 1 zu erhöhen, und while (i <= 10 ), dass es nur maximal bis 10 zählen soll.

    Danke schonmal 😕

    Edit: Würdet ihr mir sagen in welcher Zeile der Fehler liegt wenn einer da ist?Thx

    /*
    
    	main.cpp
    
    */
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    
     {
        int i = 1;                
    
        while (i <= 10) {         
            cout << i << endl;    
            i++;                  
        }
    }
    
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get(); 
    
    return 0;
    
    }
    


  • Versuch den Fehler mal selbst zu finden.
    Dazu kommentierst du einfach Bestandteile aus, von denen du denkst das sie verantworklich sein könnten.

    So z.B.

    /*    
         main.cpp
    */
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int i = 1;                
    
        while (i <= 10) {         
            cout << i << endl;    
            i++;                  
        }
    }
    
    /* 
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get(); 
    */ 
    return 0;
    
    }
    


  • Con5ti schrieb:

    Es wird Debugt, zeig mir keine Fehler an und startet auch die Konsole.

    Das kann nicht sein. Der Code sollte sich gar nicht kompilieren lassen, schon allein weil er zwei öffnende geschweifte Klammern, aber drei schließende enthält.


Anmelden zum Antworten