Abfragenlogik



  • Guten Tag!

    Es ist wirklich frustrierend bei den einfachsten Sachen nicht weiterzukommen. Ich mache mir immer sehr viel Kopf über die einfachsten Sachen. z. B:
    char cvar = '0';
    printf("Bitte ein Zeichen eingeben ");
    scanf("%c", &cvar);

    if(cvar == 3)
    {
    anw_1;
    }
    Was macht denn der Compiler zuerst ? : Erkennt es , dass es den Wert von cvar mit dem int - Wert 3 vergleichen & deswegen den Wert von cvar dem int-Wert anpassen ( sprich , dass er das Bitmuster in eine int-Zahl konvertieren muss ) muss oder Erkennt es das die 3 nicht vom Dat.typen ist , den der Wert von cvar hat & deswegen 3 in eine Binärzahl umwandeln muss ? --> "==" ist ja rechtsassoziativ --> Alles wird von rechts nach links abgewickelt.. Nur das ist keine Antwort auf meine Frage. Am Anfang war alles total easy : Vergleich von 2 Sachen. Doch jetzt komme ich bei diesen einfachsten Sachen nicht weiter. Ist das denn normal?



  • 'char' ist ein ganz normaler Ganzzahltyp (wenn auch ein wenig kleiner als int), da greift die sogenannte "Integral Promotion" (der Compiler wandelt alles kleinere automatisch in int um, bevor er zu rechnen anfängt). Das heißt in deinem Fall, er wandelt den Inhalt von cvar (der ASCII-Code deiner Eingabe) in einen int um und vergleicht das Ergebnis mit 3 - das Resultat ist mit ziemlicher Sicherheit 'false'.



  • Wenn du die Zahl 3 eingegeben hast, dann wird cvar == 51 sein, denn der ASCII Code vom Zeichen 3 ist 51. Du will wahrscheinlich folgendes machen:

    char cvar = '0'; 
    printf("Bitte ein Zeichen eingeben "); 
    scanf("%c", &cvar); 
    
    if(cvar == '3') // merke den Unterschied 
    { 
    anw_1; 
    }
    

Anmelden zum Antworten