Simples Schleifen Problem



  • Hab einen kleinen Blackout...

    bool block = true;
    	while(block == true)
    	{
    		if(yn != "y" )
    		{
    			cin.getline(name, 100);
    			cout << "Sie haben '" << name << "' als Name gewaehlt.Sind sie einverstanden?" << endl << "(J/N)";
    			cin.getline(yn, 1);
    		}
    		else
    		{
    			block = false;
    		}
    	};
    

    Was mache ich falsch?
    yn wurde schon vorher im Code definiert.Die Schleife läuft einfach unendlich oft durch nach der Bestätigungsabfrage... 😕



  • Nabend,

    Versuch es mal mit einfach Anführungszeichen: also if(yn != 'y' )



  • Habe den Schleifenfehler jetzt gelöst.Wenn ich "yn" in '' Zeichen setze, kommt diese Fehlermeldung:

    E:\C++\Svennimon\main.cpp(17) : error C2446: '!=' : no conversion from 'int' to 'char *'
            Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
    E:\C++\Svennimon\main.cpp(17) : error C2040: '!=' : 'char [2]' differs in levels of indirection from 'int'
    

    Ich habe allerdings jetzt ein anderes Problem und zwar bricht die Schleife nie ab, egal ob ich "y" eintippe oder was anderes.Die Schleife fängt immer wieder von vorne an... 🙄



  • Wenn name und yn vom Typ string sind:

    bool block = true;
        while(block == true)
        {
            if(yn != "y\0" )
            {
                cin >> name;
                cout << "Sie haben '" << name << "' als Name gewaehlt.Sind sie einverstanden?" << endl << "(J/N)";
                cin >> yn;
            }
            else
            {
                block = false;
            }
        };
    


  • name ist char[100] und yn ist vom Typ char[2] (deshalb musste ich den 2. getline()-Parameter auch auf '2' ändern).
    Ich werde es aber mal mit den string-Versionen probieren.
    Danke!



  • Hmmm...Ich habe das Problem, dass "yn" nicht korrekt verglichen wird(Ich habe es nicht mit 'string' hingekriegt).
    Egal "yn" vorher bereits mit "y" deklariere, es wird trotzdem immer die Abfrage ausgeführt.

    char yn[2] = {"y};
    ...
    if(yn!="y")
    {
       // Wird ausgeführt,egal was...
    }
    ...
    

    Irgendwie versteh ich heute gar nichts... 🙄 😉



  • strcmp

    nutze eine funktion zum vergleich von zeichenketten, oder nimm nur einen einzelnen buchstaben:

    char test='y';
    dann kannst du mit vergleichsoperatoren == oder != arbeiten.

    wir sind hier in ansi c.

    in c++ gäbe es noch die string variante, aber das wäre ein anderes thema.



  • V 9 1 9 V schrieb:

    Was mache ich falsch?

    C++ Code im ANSI-C-Forum. Das ist eindeutig falsch.

    Wenn dein yn ein char-Array ist, dann kannst du den ersten Wert einfach folgendermaßen abprüfen:

    ...
    if(yn[0] != 'y')
    ...
    

    Vielleicht wär ein tolower() um yn[0] nicht schlecht, dann kann der Benutzer auch ein großes Y eingeben ;).



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum C++ verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • was willst du eigentlich genau machen? wenn du solange namen einlesen willst bis der Anwender ein y eingibt, dann probiere es doch mal mit:

    char yn='N';
        while( yn!='y' && yn!='Y' ){ 
            cin.getline(name, 100); 
            cout<<"Sie haben '"<<name<<"' als Name gewaehlt.Sind sie einverstanden?"<<endl<<"(J/N)"; 
            cin>>yn;  
        }
    


  • Danke Leute! 🙂
    Hab vergessen das das ein char-Array ist.Und danke an Freshman, solide Lösung! 😉
    Ist ein bisschen einfacher... 🙄



  • #ifnsaid _this
    #say _this "u're welcome"


Anmelden zum Antworten