ANSI C - Switch mit *char
-
codefrag schrieb:
aber vielleicht gibts sowas ja auch für ANSI C?
Sowas in der Richtung meinte ichso wie's kekskekse es angedeutet hat
#include <stdio.h> #include <string.h> int string_in_array (char **array, int arraysize, char *search) { while (--arraysize >= 0) if (strcmp(array[arraysize], search) == 0) return arraysize; return -1; } int main (void) { char *strings[] = {"pale", "dog" , "rocks"}; printf ("found:"); switch (string_in_array (strings, sizeof(strings)/sizeof(char*), "sucks")) { case 0: printf ("first\n"); break; case 1: printf ("second\n"); break; case 2: printf ("third\n"); break; default: printf ("none\n"); break; } }
-
pale dog schrieb:
codefrag schrieb:
aber vielleicht gibts sowas ja auch für ANSI C?
Sowas in der Richtung meinte ichso wie's kekskekse es angedeutet hat
Ahh alles klar ....
Wenn man die Case-Werte ins Array schreibtich hatte ihn genau andersrum verstanden..
Klasse! Danke
-
codefrag schrieb:
Ahh alles klar ....
Wenn man die Case-Werte ins Array schreibthuh
wie bitte?
-
pale dog schrieb:
codefrag schrieb:
Ahh alles klar ....
Wenn man die Case-Werte ins Array schreibthuh
wie bitte?Na ich meine... es wird ein char array mit den möglichen "Case Werten" erzeugt und dann dieses mit einer Schleife durchlaufen
Hatte dich am Anfang nur falsch verstanden
Funktioniert ja
-
pale dog schrieb:
int main (void)
iiiiiieeeeehhhh!!!!!
pale dog schrieb:
sizeof(strings)/sizeof(char*)
Geht nur bei Arrays fester Größe
Für ein dynamisches Array kann man entweder einen Zähler benutzen oder (wie oben in meinem Beispiel ein Stop-Element anhängen (meist der Zeiger-Wert 0)
-
keksekekse schrieb:
pale dog schrieb:
int main (void)
iiiiiieeeeehhhh!!!!!
naja, früher hab ich immer 'void main()' geschrieben, hat aber auch keinem gefallen
-
keksekekse schrieb:
pale dog schrieb:
int main (void)
iiiiiieeeeehhhh!!!!!
wo ist das Problem damit? int main(void); ist eine der zulässige main Varianten.
-
supertux schrieb:
wo ist das Problem damit? int main(void); ist eine der zulässige main Varianten.
http://www.c-plusplus.net/forum/viewtopic-var-p-is-284489.html
Du hast recht zumindest nach Standard C99. Habe ich nicht gewußt.
Andererseits wird der Funktion main() vom Startcode int argc und char *argv[] zur Verfügung gestellt.
push [envp] ; (Borland?) Array von Zeigern auf Umgebungsvariablen push [argv] ; Array von Zeigern auf von setargv() geparste Kommandozeilenparameter push [argc] ; Anzahl der von setargv() geparsten Kommandozeilenparameter call _main ; main() himself push eax ; Rückgabewert oder der Wert, der "zufällig" in eax steht call _exit ; der Exitcode kann über ERRORLEVEL (*.bat) oder über GetExitCode() abgefragt werden ; und *das* ist vom Programmierer nicht vorherzusehen, auch wenn ; es nicht sehr wahrscheinlich ist
Zum Thema int/void main()
http://www.volkard.de/vcppkold/klasse_nimmspiel__void_main_oder_int_main.html
-
keksekekse schrieb:
supertux schrieb:
wo ist das Problem damit? int main(void); ist eine der zulässige main Varianten.
http://www.c-plusplus.net/forum/viewtopic-var-p-is-284489.html
Du hast recht zumindest nach Standard C99. Habe ich nicht gewußt.
Andererseits wird der Funktion main() vom Startcode int argc und char *argv[] zur Verfügung gestellt.
Aber niemand zwingt dich, diese Parameter zu beachten
(und in C bedeutet eine leere Parameterklammer etwas anderes als ein (void) ;))
-
-
Be warned that if you post your "void main" code on the forums, you're going to get told to correct it. Responding with "my teacher said it's OK" is no defence; teachers have a bad habit of being wrong. Be safe, and post only standard code, and you'll find people concentrate on answering your other problems, rather than waste time telling you about this type of thing.
So isses
-
Einen hab ich noch, einen hab ich noch...
#include <conio.h> #include <stdio.h> #include <string.h> /* Structures and Functions */ typedef int (tfunc)(int i); struct tstrfunc { char *pcstr; tfunc *pfunc; }; tfunc *a_str_switch(struct tstrfunc *psf, char *pcstr) { int i; for (i = 0; psf[i].pcstr; i++) if (strcmp(psf[i].pcstr, pcstr) == 0) break; return psf[i].pfunc; /* always return a valid pfunc */ } /* actual functions */ static int ffirst (int i) { printf("first %i\n", i); return 1; } static int fsecond (int i) { printf("second %i\n", i); return 2; } static int fdefault(int i) { printf("default %i\n", i); return 3; } int main() { /* actual data */ static struct tstrfunc pstrfunc[] = { { "first", ffirst }, { "second", fsecond }, { 0, fdefault } /* Mark End as { 0 and default func } */ }; /* - - - - - - - - - - - - - - - - - - */ a_str_switch(pstrfunc, "second")(43331); /* - - - - - - - - - - - - - - - - - - */ getch(); return 0; }