> 0 bei scanf?
-
Hi zusammen, ich hab ne kleine Verständnisfrage bezüglich des Rückgabewertes von Scanf().
Folgende Aufgabenstellung:
Schreibe ein Programm das eine benutzerdefinierte Zahl annimt
und allen Zahlen zwischen 0 und dieser Zahl ausgibt. Zahlen
<= 0 sollen das Programm beenden.#include <stdio.h> int main(int argc, const char *argv[]) { int r_in, i; if(scanf("%d", &r_in) > 0) { for (i = 0; i <= r_in ; i++) { printf("%d\n", i); } } else { return 0; } }Komischerweise wird die 0 trotzdem ausgegeben obwohl ich beim if
statement > 0 angebe, woran liegt das? -1 funktioniert.
-
Guckste hier: http://en.cppreference.com/w/c/io/fscanf
C Referenz schrieb:
Number of receiving arguments successfully assigned, or EOF if read failure occurs before the first receiving argument was assigned.
-> Der Rückgabewert hat nichts mit dem eingelesenen Wert zu tun...
-
Ok ein wenig hab ich Verstanden, leider noch vieles: Bahnhof

Ich weiss z.B immer noch nicht, warum trotzdem eine 0 ausgegeben
wird, wenn ich die Schleife ausdrücklich nur aufrufe wenn die Eingabe > 0 ist?
-
Weil der Rückgabewert von scanf nichts mit dem eingelesenen Wert zu tun hat!
-
Du missverstehst anscheinend den Rückgabewert. Du musst
r_inauf<= 0überprüfen! Der Rückgabewert vonscanfsollte jedoch auch ausgewertet werden (zweiifs oder&&).Hier findest du eine Beschreibung. Du willst exakt ein Eingabeelement einlesen, also überprüfe den Rückgabewert auf
== 1.
-
Oh Gott ich geh mal vom Schlauch runter

Danke es hat klick gemacht ^^
-
Hast du deinen Code mittlerweile angepasst?
Du rufst die Schleife auf, wenn
scanf(mindestens) einen Parameter erfolgreich eingelesen hast.Gibt mal Buchstaben ein.
Wenn die Eingabe 0 war, dann steht in r_in eben 0
Der erste Vergleich bei
forist dann 0 <= 0 . Und das ist wahr.
Also wird die Schleife ausgeführt.Du musst erst das
scanfmachen und dann danach einifmit dem r_in > 0.
-
Erstmal ja, danke. Auf char überprüfen füg ich noch hinzu, wollte mir
auch mal isdigit() näher angucken.#include <stdio.h> int main(int argc, const char *argv[]) { int r_in, i; scanf("%d", &r_in); if(r_in > 0) { for (i = 0; i <= r_in ; i++) { printf("%d\n", i); } } else { return 0; } }Danke für die schnelle Hilfe, ihr seid echt top!
-
Ne, das mit dem Buchstaben ist ein Test für deine Abfrage (im ersten Programm).
Dann kannscanfkeineninteinlesen und gibt eine 0 zurück.Du hast ein
inteingelesen. Das ist eine Zahlenwert und keine einzelnen Zeichen mehr.
Da kannst du mitisdigitnichts mehr anfangen.Das
elsekannst du übrigens weglassen, denn dasreturn 0sollte in jedem Fall am Ende gemacht werden.