gültigkeitsbereich
-
Nimm nicht argv[0], sondern argv[1]...
-
^^und nimm sscanf, nicht atoi.
-
mhm, also ich hab das jetzt ma so gemacht..aber das haut ned wirklich hin..was mach ich den falsch?
#include <stdio.h> main(int argc,char *argv[]) { int i; i = (int)*argv[1]; if(i<0 || i>16) printf("Falsch, da Argument = %d\n",i); }
-
Hui! Der Cast geht so aber nicht!
Schau mal, was fricky eben geschrieben hat...
-
so richtig?
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i, temp; i = sscanf(argv[1], "%d", &temp); if(i<0 || i>16) printf("Falsch, da Argument = %d\n",i); else printf("liegt im Integerbereich 0-16 --> %d\n",i); }
..ich raff das immer noch nicht mit dem bereich, kann mir das jemand erklären oder hat mir vlt. ein nützlichen link?
-
^^fast gut. i ist aber die anzahl der werte, die sscanf konvertieren konnte. in temp steht die zahl.
so könnte man's z.b. auch machen:... unsigned i; // mindestens ein argument, sscanf kommte es umwandeln, wert ist zwischen 0...16 if (argc > 1 && 1 == sscanf (argv[1], "%u", &i) && i < 17) puts ("hi!"); else puts ("f*ck you!"); ...
^^weil i unsigned ist, kann man den vergleich i<0 weglassen.
-
hey vielen dank... jetzt hab ich es verstanden
-
+fricky schrieb:
1 == sscanf (argv[1], "%u", &i) && i < 17)
Das geht so nicht, scanf mit %u liest auch negative Zahlen ("Matches an optionally signed decimal integer").
Der Standard scheint aber gar nicht zu spezifizieren, was dann in der Variable zu speichern ist.
Beim gcc werden negative Zahlen anscheinend einfach rumgewrappt.
-
namespace invader schrieb:
+fricky schrieb:
1 == sscanf (argv[1], "%u", &i) && i < 17)
Das geht so nicht, scanf mit %u liest auch negative Zahlen ("Matches an optionally signed decimal integer").
Der Standard scheint aber gar nicht zu spezifizieren, was dann in der Variable zu speichern ist.
Beim gcc werden negative Zahlen anscheinend einfach rumgewrappt.Wird das nicht als Zweierkomplement gespeichert? Deswegen kann man ja auf kleiner 17 prüfen, weil die Zahl im Zweierkomplement interpretiert als unsigned Integer 2^n-|zahl| ist.
Aber ich glaube eher nicht, dass das zu empfehlen ist.
-
namespace invader schrieb:
Das geht so nicht, scanf mit %u liest auch negative Zahlen ("Matches an optionally signed decimal integer").
macht doch nix. die variable ist 'unsigned', also kann der wert nicht negativ werden.