Funkcja switch. (jak używać switcha)

Funkcja switch. (jak używać switcha)
EX
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:24
0
Kopiuj
char *rodzaj_sygnalu = argv[1]; // Drugi argument z konsoli

switch ( 0 )
{
case (strcmp(rodzaj_sygnalu, "d")):
printf("d");
break;
case (strcmp(rodzaj_sygnalu, "i")):
printf("i");
break;
case (strcmp(rodzaj_sygnalu, "p")):
printf("p");
break;
}

Kompilator zwraca mi błąd, z czego on wynika ???

edytowany 1x, ostatnio: kq
szweszwe
Wstawiaj kod w znaczniki! Jaki błąd?
atmal
  • Rejestracja:około 8 lat
  • Ostatnio:2 dni
  • Postów:913
2

Nie możesz w ten sposób używać switch-case.
case muszą mieć stałą wartość i muszą być znane w czasie kompilacji - w tym przypadku jest to niemożliwe.

Napisz lepiej co chcesz osiągnąć za pomocą tego kodu.


Failure of one test is a tragedy, failure of fifty is a statistic.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Lokalizacja:Szczecin
2

Wyrażenia w switchu muszą być znane w czasie kompilacji. switch to nie funkcja`. Co tutaj właściwie chciałeś osiągnąć?


nalik
  • Rejestracja:około 9 lat
  • Ostatnio:14 dni
  • Postów:1039
0

Jeśli chcesz w ten sposób używać switch, to sugeruje inny język programowania niż c ;). W golang da radę.

edytowany 1x, ostatnio: nalik
EX
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:24
0

Gdy odpala program z konsoli muszę podać dwa argumenty, jednym z nich jest typu char jest to (d/i/p). I teraz w zależnosci od podanego argumentu, chce wykonać pewną insturukcję(Za pomoca switch, nie ifów)

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Lokalizacja:Szczecin
3
Kopiuj
char rodzaj_sygnalu = argv[1][0];
switch(rodzaj_sygnalu)
{
case 'p': foo(); break;
case 'i': bar(); break;
case 'd': baz(); break;
}

EX
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:24
0

A gdybym moj argument był typu string, można było by rozwiazać problem w podobny sposób ?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Lokalizacja:Szczecin
0

Nie w C. W C++ mógłbyś zafejkować trochę z mapą albo metaprogramowaniem, ale to i tak nie byłby switch na stringu.


EX
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:24
0

Dziękuje

nalik
  • Rejestracja:około 9 lat
  • Ostatnio:14 dni
  • Postów:1039
0
Exceleent napisał(a):

A gdybym moj argument był typu string, można było by rozwiazać problem w podobny sposób ?

W c? Zależy, co rozumiesz przez podobny sposób. Switchem niekoniecznie, chyba, że napiszesz funkcję zamieniająca jednocznacznie łańcuch znakowy na liczbę. Ewentualnie drabinka if - else if .

edytowany 1x, ostatnio: nalik
kq
A potem te liczby by musiały być w case'ach, co jest nieprzenośne i nieutrzymywalne :​P
nalik
Myślałem o wyliczeniach albo define. enum byłby jednocześnie indeksem do tablicy łańcuchów znakowych, funkcja leci przez tablice porównując łańcuchy. Taka mała mapa int -> char* dla bardzo ubogich. Zależy ile wartości potrzebowałby trzymać, przy większej ilości łańcuchów kompletnie niewydajne, ale dla 10 nie widzę problemu.
kq
No ale to wciąż trzeba utrzymać, wyliczyć i jest wciąż nieprzenośne (bardzo życiowy przykład: a co jak nagle muszę napisać program na mainframe z EBCDIC? :​D)
nalik
Nie jestem pewien czy autor zamierza przenosić swój program na mainframe bez ascii ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.