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...