Erklärung einer Ausgabe



  • #include <iostream>
    using namespace std;
    
    struct test {
    	int a,b,c;
    } NM;
    
    int main() {
    	char* klasse = "C";
    	NM.a  = NM.b = 255;
    	NM.c = 7;
    
    	if (klasse == "C" && NM.a, NM.b, NM.c == 255)
    		cout << "ausgabe1";
    	else {
    		if (klasse == "B" && NM.a, NM.b == 255)
    			cout << "ausgabe2";
    		else {
    			if (klasse == "A" && NM.a == 255)
    				cout << "ausgabe3";
    			else
    				cout << "ausgabe4";
    		}
    	}
    	return 0;
    }
    

    Bei diesem Code wird "ausgabe2" ausgegeben, was mir nicht ganz einleuchtet.
    Nur aus einem Interesse:
    Kann mir jemand detailliert erklären, warum "ausgabe2" ausgegeben wird?
    Das Erste, was mir nicht ganz klar ist:
    Reserviert der Compiler für jede Stringkonstante nur einen Speicherbereich?
    Denn char*str = "C";
    if(str=="C") ist wahr und hier werden ja Adressen verglichen.
    Deshalb dürfte er ja eigentlich NICHT "ausgabe2" ausgeben, da klasse nicht "B" ist.

    Bin für jeden Tipp dankbar:)



  • Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;
    die letzte Bedingung bsp: nm.C == 255 wird beachtet



  • Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;
    die letzte Bedingung bsp: nm.C == 255 wird beachtet

    Ja, das dachte ich mir auch und genau deshalb versteh ich ja die Ausgabe nicht.
    Die 1. Bedingung ist falsch, da NM.C != 255
    Die 2. Bedingung ist aber auch falsch, da klasse != "B" ist und dennoch ist diese Bedingung erfüllt. Wieso?



  • Darum:

    gh0st124 schrieb:

    Bei den if-Bedingungen werden jeweil die Bedingung vor dem ',' nicht beachtet;


Anmelden zum Antworten