Seltsame Warnung



  • Tomete schrieb:

    Also da es sich bei Hotel um einen int handelt

    Häh?
    Ich sehe da:
    ...
    char hotel;
    ...



  • Ups, tut mir leid. Habe falsch geguckt. Aber ist char nicht immer ein Zeichen lang, es sei denn man schreibt [n] dahinter?



  • Nein, char ist die kleinste adressierbare Einheit einer Architektur. Können 8 Bit sein oder auch 16.
    Edit: Oder so. Alles andere ist compilerspezifisch, wie z.B. Bitfields gehandhabt werden.



  • OK, aber wie lese ich dann "hotel" aus? Wenn ich printf("%s", hotel) als Befehl angebe gibt er es nicht aus.



  • Bei %s erwartet printf einen Zeiger auf ein Nullterminiertes Char-Array.
    Das wird i.A. C-String genannt.

    scanf erwarte bei %s einen Adresse, wo es so einen C-String ablegen kann. An der Adresse muss genug Platz dafür vorhanden sein.

    Ein einzelnes char ist dafür nicht ausreichend.

    Zum Einlesen eines einzelnen Zeichens gibt es %c als Formatspecifier bei scanf .
    Damit du mit übriggebliebenen Whitespace keine Problem bekommst, mach noch ein Leerzeichen davor:

    scanf(" %c", &hotel);
    prinft("Zeichen:%c", hotel);
    

    Glaub jetzt aber nicht, dass die Bedeutung der Formatspecifier bei scanf und printf gleich sind. Das sind sie nicht.



  • Hm, wenn ich bei "scannf" %c statt %s verwende, darf ich gar nichts mehr eingeben. Und das Hotel berechnet er ja auch immer. Nur egal, was ich für die Häuser eingebe, es kommt immer 115 raus.



  • Dann zeig deinen aktuellen Code, sonst raten wir nur rum.



  • #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
    
    int haeuser;
    char hotel;
    int total;
    
    printf("Anzahl der Haeuser");
    scanf("%i", &haeuser);
    printf("%i", haeuser);
    printf("Hast du ein Hotel?");
    scanf("%c", &hotel);
    
    if
    (hotel=='j' && haeuser<5)
    {
    total = (haeuser * 40)+115;
    printf("Das kostet dann %i DM", total);
    printf("%c", hotel);
    }
    if(hotel=='n' && haeuser<5)
    {
    total = haeuser * 40;
    printf("Das kostet dann %i DM", total);
    }
    
    else
    {
    printf("Das kann so nicht stimmen");
    }
    return 0;
    }
    


  • DirkB schrieb:

    Damit du mit übriggebliebenen Whitespace keine Problem bekommst, mach noch ein Leerzeichen davor:

    scanf(" %c", &hotel);
    prinft("Zeichen:%c", hotel);
    

    Nochmal: zwischen " und %c soll ein Leerzeichen



  • Ah, vielen Dank, jetzt geht es. Manchmal sind es halt wirklich die Kleinigkeiten...


Anmelden zum Antworten