Programm will nicht beenden

moin


Glaub mir doch gleich ;)
Aber ja, if(x = 0) kommt sehr selten, bis nie vor da das Ergebnis klar ist...

Und ja jede meiner 1581 Antworten fangen so an, bzw. hören so auf und so wird es auch weiter gehen.


mfg
umbrasaxum
 
Aber ja, if(x = 0) kommt sehr selten, bis nie vor da das Ergebnis klar ist..
Ein gutes Beispiel, wo sowas gerne einsetzt, war mal ein Versuch eine Backdoor in den Linuxkernel zu schleussen. Wobei man dann allerdings:
Code:
if ((x=0)) { /*verwirrcode */ }
schreiben würde, um die Compilerwarnungen zu unterdruecken. Am besten dann dergestallt, um es noch besser zu kaschieren:
Code:
if (((x=func())=0)) { /*verwirrcode */ }
Dieser "Fehler" wird bei der Korrektur dann schon mal gern uebersehen.
Mit der Sache wurde damals versucht, einen Wechsel der user-id auf 0 (=root) unter bestimmten Bedingungen zu erzwingen.
 
@umbrasaxum: Deine Erklärung stimmt nicht ganz (kniefiesel! ;-)): In der if-Klammer wird ausgewertet, ob der Wert, der darin steht 0 ist oder nicht. Ist der Wert != 0, dann wird die nachfolgende Anweisung ausgeführt, sonst nicht. Der Wert der Zuweisungs - Operation ist der Wert der Variablen nach der Zuweisung (siehe operator=).
if(x=0) -> Anweisung wird nie ausgeführt
if(x=1) -> Anweisung wird immer ausgeführt
if(x=2) -> Anweisung wird immer ausgeführt
...
 
Mit

if (x=0)

wird doch nicht die Zahl 0 abgefragt, man kann auch if (x=NULL) abfragen und das wird auch nie ausgeführt! Das habt ihr doch gemeint oder
Ihr habt das (für mich aufjedenfall) komplieziert erklärt
 
moin


Nein nicht ganz.
Es wird Erst dem x eine Null zugewiesen, DANN wird überprüft welchen Wert x hat.

Und ja es wird nie ausgeführt.


mfg
umbrasaxum
 
Ah ja tatsächlich gehts wenn man == eingibt. Danke für die Hilfe.
Ich weiß, ist ne echt blöde Art ein Programm zu beenden, aber ich hab son Buch das erklärt im Prinzip nur die ganze Arbeitsweise von C++. Wenn ich jetzt wirklich ein Programm schreiben will komm ich damit nicht weit. Es werden da noch nichtmal grafische Sachen angesprochen.
Also wie könnte ich denn das Programm beenden, wenn ich eine Taste drücke.
Ich denke mal man geht dann in eine Schleife, die ständig überprüft, ob die jeweilige Taste gedrückt wird, oder? Wie lautet denn dafür der Befehl?
 
moin


Code:
while(1)
{
    if(_kbhit())
    {
        char taste = getch();
        if(taste == (char)13)          //(char)13 = Return
            return 0;

}


mfg
umbrasaxum
 
Wenn Du das immer noch in einer Konsolenanwendung machen willst dann kannst du das machen:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

//das brauchst du nicht unbedingt, brauchst aber dann nicht immer mit dem dez. code arbeiten
#define ESC 27 //ESC ist der 27 dez wert


int iWahl;
int main ()
{
	while (1)
	{
		printf("Hallo");
		printf("\n\nMit ESC beenden\n\nbeliebige taste weitermachen.\n\n");
		iWahl=getch();
		switch(iWahl)
		{
			case ESC:
				return 0;
		}
	}
	return 0;
}

Du könntest auch das: #define ESC 27 weglassen, aber dann musst Du statt:
case ESC: das hier schreiben case 27: ohne die Hochkommata (oder so ^^) alles klar
 
Zurück