gültigkeitsbereich
-
newbee123 schrieb:
das heißt, wenn mein programm kein namen hat oder asdfghjklöäüpoiuq heiß, soll ein fehler ausgegeben werden?
Das Programm nimmt einen Parameter an (hier ist wohl ein Kommandozeilenparameter, nicht ein Parameter einer Funktion, gemeint). Der soll eine Ganzzahl und zwischen 0 und 16 sein. Wenn das zutrifft, ist alles in Butter, ansonsten halt nicht (Fehlermeldung ausspucken oder so).
-
mhm, aber der erste parameter ist doch der name des programms? irgendwie steh ich gerade aufm schlauch...
-
newbee123 schrieb:
mhm, aber der erste parameter ist doch der name des programms?
das stimmt doch gar nicht.
-
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.