problem mit name



  • hallo ich hab ein menü
    und ich will im knotenpunkt ein name eingeben
    aber das problem ist wenn ich den knotenpunkt 'n' drücke kommt eine endlosschleife die net weggeht
    ich will halt den namen nur in knotenpunkt 'n' eingeben

    #include <iostream>
    #include <conio.h>
    #include <stdlib.h>
    #include <string>
    
    using namespace std;
    //variable
    
    //prototypen
    
    int main()
    {
    
    	char Menü;
    do
    	{
    cout<<"\n\n\n\n\n\n\n\n\t\t\t<S>piel Starten\n\t\t\t<N>ame deines Helden\n\t\t\t<O>tionen\n\t\t\t<B>eenden des Spieles\n\n\t\t\t";
    
    	cin>>Menü;
    switch (Menü)
    {	
    	case ('s'):
    	case ('S'):
    	{
    		cout<<"Spiel Startet jetzt";
    
    	}break;
    
    	case ('o'):
    	case ('O'):
    	{
    		cout<<"Optionen";
    
    	}break;
    
    	case ('N'):
    	case ('n'):
    	{	
    	char noname [30];
    	cin.get (noname, 29);
    	cout << noname;
    
    	}break;
    
    	case ('B'):
    	case ('b'):
    	{
    		cout<<"Spiel Beendet jetzt";
    
    	}break;
    
    	default: 
    		{
    
    		}break;
    
    	}
    
    }while ( Menü != 'b' &&  Menü != 'B');
    
    }
    

  • Mod

    Fang doch mal endlich an, deinen Variablen standardkonforme Namen zu geben! Das wurde dir bis jetzt schon in jedem einzelnen deiner Threads gesagt! Benutz doch endlich standardkonforme Header, das heißt cstdlib, nicht stdlib.h, das wurde dir auch in jedem deiner Threads gesagt!

    Warum benutzt du char-Arrays, wenn du doch offensichtlich weißt, was ein string ist?

    Wenn du Streamoperationen benutzt, die fehlschlagen können, dann prüfe das auch nach. Oder mach's gleich richtig, siehe oben.



  • JA Ich weiß was ein string ist
    aber wenn ich

    string noname [30];
        cin.get (noname, 29);
        cout << noname;
    

    komt folgende fehler meldung
    1 IntelliSense: Keine Instanz von Überladene Funktion "std::basic_istream<_Elem, _Traits>::get [mit _Elem=char, _Traits=std::char_traits<char>]" stimmt mit der Argumentliste überein.



  • Scheinbar weißt du nicht was ein string ist. Du hast nämlich ein string-Array, also ein Array, was mehrere strings enthält.



  • ich weiß das strings text ausgeben und so



  • Was? Dein Beitrag macht überhaupt keinen Sinn. Schau dir nochmal string an: http://www.cplusplus.com/reference/string/string/string/
    Und dann versuch es nochmal, aber mit einem string, statt einem char-Array.



  • ich hab leider kein plan 😞 😞



  • So kriegst du die Lösung auch nicht vorgekaut. Schau dir den Link an. Wenn du damit schon nicht verstehst, wie man einen string benutzt, solltest du wohl nochmal von vorne anfangen...



  • #include <iostream>
    #include <conio.h>
    #include <cstdlib>
    #include <string>
    
    int main()
    {
    	using std::cout;//importiert einzelne Bezeichner (using namespace std; importiert alle Bezeichner, also std::cout, std::cerr, ...)
    	using std::cin;//dito
    	using std::string;//dito
    	const size_t x(24);/// Der abstand in Leerzeichen zur linken Seite der Shell
    
    	for(char Menu;Menu != 's' && Menu != 'S';)
        {
    		cout << string(10, '\n') 		  << string(x, ' ')//Viel schöner, kannst es durch einmaliges Ändern von x verschieben&co
    			 << "<S>piel Starten\n"        << string(x, ' ')
    			 << "<N>ame deines Helden\n"   << string(x, ' ')
    			 << "<O>tionen\n"              << string(x, ' ')
    			 << "<B>eenden des Spieles\n\n"<< string(x, ' ');
    		string noname;
    
    		switch (Menu = getch())//getch(), was meiner Meinung nach für Spiele besser geeignet ist
    		{
    			case 's':case 'S':
    
    				cout << "Spiel Startet jetzt";
    				break;
    
    			case 'o':case 'O':
    
    				cout << "Optionen";
    				break;
    
    			case 'N':case 'n':
    
    				cout << "Bitte Namen eingeben: ";
    				std::getline (cin, noname);
    				cout << string(x + 8, ' ') << "Gespeichert: \"" << noname << "\"!";
    				break;
    
    			case 'B':case 'b':
    
    				cout << "Spiel Beendet jetzt";//Direkt hier beenden. Wenn du allerdings noch andere Sachen machen musst, schreib eine Funktion, die dir das alles (+ das Beenden) abnimmt
    				exit(0);
    		}
    	}
    }
    

    Entspräche das deinen Vorstellungen? :xmas1:

    1. Nimm lieber string(10, '\n') statt "\n\n\n\n\n\n\n\n\n\n".
    2. Formattier es bitte schöner. Ich musste das z.B. selbst machen, weil ich es irgendwie nicht lesen konnte 😉
    3. Setz dich jetzt hin und lern einmal vernünftig Strings/Streams. Das sind (neben anderem wie der STL) wesentliche Bestandteile von C++, die du auswendig können musst/solltest.



  • Toll gemacht Hacker. Programmier ihm den Rest des Spieles doch auch noch. Ich wusste schon, als ich gesehen habe, dass du der letzte Poster bist, dass du ihm die komplette Lösung gibst. Meinst du, wer so wenig Eigeninitiative zeigt, liest sich deine Kommentare durch? Der kopiert und fügt es in seine IDE und freut sich, dass irgendein Idiot ihm die Arbeit abnimmt. Gelernt hat er dadurch rein garnichts und nervt uns morgen mit den gleichen Fragen wieder, welche Code enthalten, bei denen man einen 50 Zoll Bildschirm brauch, weil der Code eingerückt ist wie Sau.



  • FreakY<3Cpp schrieb:

    Toll gemacht Hacker. Programmier ihm den Rest des Spieles doch auch noch. Ich wusste schon, als ich gesehen habe, dass du der letzte Poster bist, dass du ihm die komplette Lösung gibst. Meinst du, wer so wenig Eigeninitiative zeigt, liest sich deine Kommentare durch? Der kopiert und fügt es in seine IDE und freut sich, dass irgendein Idiot ihm die Arbeit abnimmt. Gelernt hat er dadurch rein garnichts und nervt uns morgen mit den gleichen Fragen wieder, welche Code enthalten, bei denen man einen 50 Zoll Bildschirm brauch, weil der Code eingerückt ist wie Sau.

    Gut, du hast recht. Ich lass das jetzt so stehen, aber: Das nächste Mal, wenn Maldikus mit so einem Scheiß Post kommt (sprich: falsches Deutsch, behinderte Formatierung, usw.) dann kann ein Mod das bitte Schließen!! 😡 :xmas1: :xmas2:


  • Mod

    Hacker schrieb:

    Gut, du hast recht. Ich lass das jetzt so stehen, aber: Das nächste Mal, wenn Maldikus mit so einem Scheiß Post kommt (sprich: falsches Deutsch, behinderte Formatierung, usw.) dann kann ein Mod das bitte Schließen!! 😡 :xmas1: :xmas2:

    Weil du dich nicht beherrschen kannst?



  • SeppJ schrieb:

    Hacker schrieb:

    Gut, du hast recht. Ich lass das jetzt so stehen, aber: Das nächste Mal, wenn Maldikus mit so einem Scheiß Post kommt (sprich: falsches Deutsch, behinderte Formatierung, usw.) dann kann ein Mod das bitte Schließen!! 😡 :xmas1: :xmas2:

    Weil du dich nicht beherrschen kannst?

    Nein, ich kann mich bestens beherschen. vielleicht hätte ich mehr lustige Smilies dahinter mixen sollen :p :xmas1: 😃

    Edit: Nein, SeppJ! Ich meine, wie soll man jemandem helfen, wenn er das garnicht
    will? Er will ja nur eine Lösung und keine Erklärung. Und dafür ist das hier ja Schließlich nicht da.



  • @FreakY<3Cpp ich will nicht das ihr mir allles vorsagt sondern lösungsvorschläge bekomme



  • Maldikus schrieb:

    @FreakY<3Cpp ich will nicht das ihr mir allles vorsagt sondern lösungsvorschläge bekomme

    Haha, nein! Das ist es ja gerade. Ich hab dir einen Vorschlag gegeben, am Besten ist es du erarbeitest jetzt alles, was darin vorkommt (und du nicht grundlegend/richtig verstehst). :xmas1:

    Formatierung

    Unter Formatierung versteht sich hier, dass du die Code-Schnipsel in verschiedene Ebenen, oder Namensräume (engl. Namespaces) unterteilst. Das Funktioniert durch zwei Stile:

    int main()
    {
        int a;//Vier Zeichen Breite
            int b;//Acht Zeichen Breite
      int c;//Zwei Zeichen Breite
    }
    

    Also einmal Anzahl der Zeichen, bzw. die Größe deines Tabs.
    Da empfehle ich dir 4 Zeichen breite - nicht zu kurz, nicht zu lang 😉 😉
    Und das natürlich auch auf jeder Ebene, also so:

    int main()
    {
        int a;//Vier Leerzeichen
            int b;//Acht Leerzeichen
      int c;//Zwei Leerzeichen
        {
            int a;//Vier Leerzeichen
        }
            {
                    int b;//Acht Leerzeichen
            }
      {
        int c;//Zwei Leerzeichen
      }
    }
    
    int main(){//Klammer an den Kopf
        int a;
        int b;
        int c;
    }
    
    int main()
    {//Klammer Auf eigene Zeile
        int a;
        int b;
        int c;
    }
    

    Ich empfehle dir letzteres, da es übersichtlicher ist - einige sagen, ersteres spart Platz.

    int main()
    {
        int a;//_.-"/______________________///// HIER IST AAAAA!!!!! HIER!!
              //`'-.\~~~~~~~~~~~~~~~~~~~~~~\\\\\
    
    }
    

    Ich glaub du weißt bei diesem Beispiel was ich mein 😉 .
    Kommentare sind sehr Nützlich, und können den Programmabschnitt in Deklarationen, Anweisungen und Sonstiges Teilen.

    Regel: Versuche, bestimmte (wichtige) Variablen und Funktionen bei ihrer Deklaration (und vllt. bei ihrer Nutzung) zu Kommentieren. Verschiedene Code-Abschnitte durch Kommentare unterteilen, wie z.B. verschiedene Teile, aus denen dein Programm besteht (z.B. "Hauptmenü hier", "Funktion zur Berechnung des Standardabweichung", usw).

    Besonders im Zusammenhang mit komplexeren Zeilen sind sie essentiell, da Sie dir das Verstehen in z.B. einem halben Jahr sehr viel einfacher machen.

    Nochwas: Wieviel packt man in eine Zeile?

    int main()
    {
    	int a = 0;float b(.5f);
    	std::cout << "Hallo!\n";std::cout << "Nawiegehts?\n";cout << "Muss schluss machen, meine Alte zickt wieder rum ;)\n";
    }
    
    ///Sehr viel schöner und definitiv besser lesbar:
    
    int main()
    {
    	int a = 0;
    	float b(.5f);
    
    	std::cout << "Hallo!\n"
    	             "Nawiegehts?\n"
    			     "Muss schluss machen, meine Alte zickt wieder rum ;)\n";
    }
    

    Hier sieht man, sowas wie Deklarationen und Anweisungen vielleicht etwas trennen.
    Faustregel: Immer eine Anweisung auf eine eigene Zeile.
    Das Programm in Paragraphen zu unterteilen erhöht (wie die Formatierung im Allgemeinen) die Wartbarkeit und Struktur des Quellcodes.
    Und daran wirst du (und wir alle) Freude haben :xmas1:

    Jetzt kommen wir zum Ende.

    int main()
    {
        int wpcneop5 = 0;
        float blabla(.78f);
        long double schlag_den_raab;
    }
    

    Du musst deinen Variablen (und Funktionen!, sowie Klassen, Unions und Strukturen, Enums, usw.) sinnvolle Namen geben. Dies ist sehr wichtig; denn du kannst sie dir nicht nur viel leichter merken, sie erhöhen das Verständnis enorm:

    int main()
    {
        int result = 0;
        float multipilier(.78f);
        long double movementY;
    }
    

    Und weiter gehts. Noch eine Kleinigkeit.

    for(const A& a : meinvector)//Edit:Schlechter Name
        tuwasmit(a);//Edit:Schlechter Name
    
    for(const A& a : meinvector)//Edit:Schlechter Name
    { 
        tuwasmitklammerndrumrum(a);//Edit:Schlechter Name
    }
    

    Ich bevorzuge die erste Methode(Platzsparnis), auch wenn der Vorteil der letzteren ist, dass man einfach eine Weitere Anweisung einfügen kann
    ohne die Klammern setzten zu müssen.



  • ja genau so lerne ich (ich bin von beruf zerpanungsmechanicker und ich schreibe programme und in meiner lehrzeit hab ich auch ferdige programme mir angeschaut habe und wenn ich fragen hatte habe ich gegefragt )

    ach übrigens @Hacker dein lösungsvorschlag hat mir (einbichsen) geholfen geholfen ich habe es jetzt anders geschrieben



  • Maldikus schrieb:

    ja genau so lerne ich (ich bin von beruf zerpanungsmechanicker und ich schreibe programme und in meiner lehrzeit hab ich auch ferdige programme mir angeschaut habe und wenn ich fragen hatte habe ich gegefragt )

    ach übrigens @Hacker dein lösungsvorschlag hat mir (einbichsen) geholfen geholfen ich habe es jetzt anders geschrieben

    Maldikus schrieb:

    Ja, genau so lerne ich (ich bin von Beruf her Zerpanungsmechaniker und schreibe Programme. In meiner Lehrzeit hab ich mir auch fertige Programme angeschaut und, falls ich welche hatte, Fragen gestellt.

    Ach übrigens, @Hacker: Dein Lösungsvorschlag hat mir (ein bisschen) geholfen. Ich habe es jetzt anders geschrieben.

    Bitte! Satzzeichen, Grammatik, Rechtschreibung!



  • Ich empfehle statt Leerzeichen tabs mit 8 Zeichen breite. Erhöht die Lesbarkeit bei >5 Ebenen enorm.



  • 314159265358979 schrieb:

    Ich empfehle statt Leerzeichen tabs mit 8 Zeichen breite. Erhöht die Lesbarkeit bei >5 Ebenen enorm.

    Natürlich, Tabs. Das meinte ich auch. Aber 8? Ich weiß nicht...
    benutzt hab ich es natürlich schon mal. Für Anfänger sind 8 Zeichen vielleicht übersichtlicher.



  • Hacker schrieb:

    314159265358979 schrieb:

    Ich empfehle statt Leerzeichen tabs mit 8 Zeichen breite. Erhöht die Lesbarkeit bei >5 Ebenen enorm.

    Natürlich, Tabs. Das meinte ich auch. Aber 8? Ich weiß nicht...
    benutzt hab ich es natürlich schon mal. Für Anfänger sind 8 Zeichen vielleicht übersichtlicher.

    Pi trollt doch nur wieder mal blöd rum.



  • hustbaer schrieb:

    Hacker schrieb:

    314159265358979 schrieb:

    Ich empfehle statt Leerzeichen tabs mit 8 Zeichen breite. Erhöht die Lesbarkeit bei >5 Ebenen enorm.

    Natürlich, Tabs. Das meinte ich auch. Aber 8? Ich weiß nicht...
    benutzt hab ich es natürlich schon mal. Für Anfänger sind 8 Zeichen vielleicht übersichtlicher.

    Pi trollt doch nur wieder mal blöd rum.

    Hat aber Recht, ich glaube wenn die Ebenen weiter auseinander sind kann man Sie einfacher Unterscheiden.


Anmelden zum Antworten