Frage zu char



  • Hallo,
    ich hab mal wieder eine Frage, und zwar bzgl des Char.
    Wir sollen ein Programm schreiben mit einer Art Menüsteuerung. Das ist mir auch ganz gut gelungen, dass problem ist nur, dass ich momentan die Tastenauswahl nur mit Zahlen (integer um genau zu sein) gemacht habe.
    > sprich wird nen Buchstabe eingegeben, hängt sichs auf
    Drum wollte ich diese Variable (bei mir t) durch ein char darstellen:

    char t[16];
    

    so hab ichs oben definiert
    und benützen tue ich es im programm so:

    if ((t!='1') && (t!='2') &&(t!='3') && (t!='4'))
      {
      printf("...n");
      }
    

    sowie mehrmals in der Form

    else if (t=='1')
    

    Nun kommt leider beim Compilieren mal wieder ein Fehler und zwar der Art:
    warning: comparison between pointer and integer

    Das programm funktioniert zwar, dennnoch irritiert mich diese Fehlermeldung.
    Was ist das und wie hab ich das als Anfänger zu deuten?

    Edith meint: Funktioniert doch nich, jetzt funktionieren '1' '2' '3' '4' auch nich mehr



  • Warum
    char t[16];
    und nicht einfach
    char t;
    ?



  • hmm, mir war so als ob man dahinter noch angeben müsste, wie lang das char sein darf, muss ich mir heute nochmal genau die Vorlesungsunterlagen anschauen
    Zumindest funktioniert es, so wie es soll^^



  • ein char ist ein Zeichen. char t[16] ist ein Array aus char für 16 Zeichen. Wenn Du nur eines benötigst, dann nimm auch nur eines.



  • schreib doch einfach

    int c = '';
    

    kannst du mit int ein Zeichen einlesen.



  • Ein char ist ein Ganzzahltyp der Platz für ein Zeichen bietet.
    char t[16]; ist (wie schon gesagt) ein Array.
    Arrays werden in C aber anders behandelt als die einfachen Typen.

    Bei (t!='1') wird t als Anfangsadresse des Arrays aufgefasst.
    Darum kommt auch deine Fehlermeldung: Vergleich zwischen Zeiger (t) und Integer ('1'). Ja, das Zeichen '1' ist in C auch ein Integer.



  • Die Warnung 'warning: comparison between pointer and integer' mag tatsächlich etwas merkwürdig erscheinen. Schließlich hast du weder einen Zeiger noch einen int-Wert im fehlerhaften Abschnitt definiert. ^^

    Das kommt daher dass der Name eines Arrays (ohne []) die Adresse des ersten Elements des Arrays liefert und Zeichenliterale vom Typ int sind.

    Edit:
    😮 Zu spät..

    Aber hier noch ein kleiner Schnipsel

    char c = 'c';
    printf("%i; %i\n", sizeof('c'), sizeof(c)); // 4; 1
    

    Ne.. so gefiel mir das noch nicht. Jetzt ist es gut. 🙂
    Die Betonung soll auf Literal liegen.


Log in to reply