Problem bei if-Verzweigung [gelöst]



  • Warum wird der kommentierte if-Zweig im folgenden Code nicht ausgeführt?

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    	int errorcnt = 0;
    	char PCname[MAX_COMPUTERNAME_LENGTH];
    	cout << "Programm zum umbenennen vom Computer.\n" << endl;
    	do {
    	cout << "Bitte geben Sie den gewuenschten Namen ein: " << endl;
    
    	cin >> PCname;
    	system("cls");
    
    	if(SetComputerName(PCname) != NULL)
    		cout << "PC wurde umbenannt. Aenderungen ab dem naechsten Systemstart wirksam." << endl;
    	else
    		{
    		cout << "Fehler beim Umbenennen. Fehlercode: " << GetLastError() << endl;
    		++errorcnt;
    		}
    		if (errorcnt < 1) // <---------------------- Wieso funktioniert dieser if-Zweig nicht??
    			cout << "Sie haben schon " << errorcnt << " mal eine ungueltige Eingabe gemacht.\n"
    				 << "Bitte wenden Sie sich bei Fragen an den Support unter der Tel. Nr.: 0900/666666"; //Kleiner Scherz am Rande ;-)
    
    	} while(SetComputerName(PCname) == NULL);
    	cin.sync();
    	cin.get();
    	return EXIT_SUCCESS;
    }
    


  • Weil SetComputerName(PCname) nie ungleich 0 ist?



  • drakon schrieb:

    Weil SetComputerName(PCname) nie ungleich 0 ist?

    Doch ist es. Kannst ja mal probieren.

    Return Value
    
    If the function succeeds, the return value is a nonzero value.
    
    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    

    Oder seh ich das falsch?



  • Ah. Du hast ja nach dem anderen if gefragt, sorry.
    Dann wird da halt errorcnt immer auf 1 gesetzt..

    Geh da am besten mit dem Debugger durch, dann siehst du, was genau fehl schlägt..



  • Die Bedingung kann nur dann erfüllt sein, wenn

    SetComputerName(PCname) != NULL

    erfüllt ist, denn im anderen (Fehler)fall wird errcount inkrementiert, und ist dann nicht mehr kleiner als 1.



  • NULL != 0?

    #include <iostream>
    
    int function()
    {
        return 0;
    }
    
    int main()
    {
        if(function() != NULL)
            std::cout << "Not NULL" << std::endl;
        else 
            std::cout << "NULL" << std::endl;
    }
    

    Ausgabe:

    $ ./test_1
    NULL
    


  • Null0r schrieb:

    Ausgabe:

    $ ./test_1
    NULL
    

    Whoops, sry, passt ja...



  • Belli schrieb:

    Die Bedingung kann nur dann erfüllt sein, wenn

    SetComputerName(PCname) != NULL

    erfüllt ist, denn im anderen (Fehler)fall wird errcount inkrementiert, und ist dann nicht mehr kleiner als 1.

    Ach du Scheiße, ich merks erst jetzt!!

    natürlich muss es heißen:

    if (errorcnt > 1)

    Danke nochmal.



  • Nicht eher:
    if (errorcnt >= 1)
    ?



  • drakon schrieb:

    Nicht eher:
    if (errorcnt >= 1)
    ?

    Nein, etwas Toleranz lass ich dem Benutzer noch xD



  • Sonst wäre da ja auch dann

    Sie haben schon 0 mal eine ungueltige Eingabe gemacht...
    

    ausgegeben worden 😃



  • Th69 schrieb:

    Sonst wäre da ja auch dann

    Sie haben schon 0 mal eine ungueltige Eingabe gemacht...
    

    ausgegeben worden 😃

    xD Ja, voll der dumme Fehler.



  • Th69 schrieb:

    Sonst wäre da ja auch dann

    Sie haben schon 0 mal eine ungueltige Eingabe gemacht...
    

    ausgegeben worden 😃

    Das bezweifel ich!


Anmelden zum Antworten