Seltsame Warnung



  • "Er" hat keine Probleme, du hast die Probleme.

    Zitat:
    Außerdem: Schau mal, was scanf("%s", &hotel); genau macht und wieviele Zeichen in hotel passen.

    Das hast du definitiv nicht gemacht, sei nicht so faul.

    Am Besten gar nicht erst auf die Freundlichkeit eingehen, bringt leider sowieso nix.



  • Also da es sich bei Hotel um einen int handelt, sollte der Wertebereich doch –2147483648 +2147483647 sein, oder nicht?



  • 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