Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z instrukcją switch
Forum PHP.pl > Forum > Przedszkole
44x
Witam. Mam drobny problem z instrukcją switch. Możliwe że gdzieś wdała się literówka czy coś jednak nie mogę sobie z tym poradzić. Przepisywałem wadliwą część chyba z 5 razy i bez skutku. Poniżej kod.

  1. $trafiony=rand(1,100);
  2.  
  3.  
  4. switch($trafiony)
  5. {
  6.  
  7.  
  8. case $trafiony == 1:
  9. $cel=rand(1,5);
  10. switch ($cel)
  11. {
  12. case $cel == 1:
  13. $smarty -> assign ("Error", "<center>1 </center>");
  14. $smarty -> display ('error.tpl');
  15. break;
  16. case $cel == 2:
  17. $smarty -> assign ("Error", "<center> 2 </center>");
  18. $smarty -> display ('error.tpl');
  19. break;
  20. case $cel == 3:
  21. $smarty -> assign ("Error", "<center> 3 </center>");
  22. $smarty -> display ('error.tpl');
  23. break;
  24. case $cel == 4:
  25. $smarty -> assign ("Error", "<center> 4 </center>");
  26. $smarty -> display ('error.tpl');
  27. break;
  28. case $cel == 5:
  29. $smarty -> assign ("Error", "<center> 5 </center>");
  30. $smarty -> display ('error.tpl');
  31. break;
  32.  
  33. }
  34.  
  35. break;
  36.  
  37. case $trafiony <= $a && $trafiony < 100:
  38. $unk=rand(1,100);
  39. If ($un > $unk) {
  40. $smarty -> assign ("Error", "<center> Zle </center>");
  41. $smarty -> display ('error.tpl');
  42. } else {
  43. $smarty -> assign ("Error", "<center> Dobrze </center>");
  44. $smarty -> display ('error.tpl');
  45. }
  46. break;
  47.  
  48.  
  49.  
  50.  
  51. case $trafiony > $a && $trafiony < 100:
  52. $smarty -> assign ("Error", "<center> PUDŁO</center>");
  53. $smarty -> display ('error.tpl');
  54. break;
  55.  
  56. case $trafiony == 100:
  57.  
  58. $odp=rand(1,100);
  59. switch ($odp)
  60. {
  61. case $odp <= $b && $odp < 100:
  62. $smarty -> assign ("Error", "<center> Udało się</center>");
  63. $smarty -> display ('error.tpl');
  64. break;
  65. case $odp == 100:
  66. $smarty -> assign ("Error", "<center> Nie udalo sie</center>");
  67. $smarty -> display ('error.tpl');
  68. break;
  69. }
  70.  
  71. break;
  72. }


Cały kod hula jak trzeba. Każdy warian odpowiednio wyswietla w zależności od zmiennych.
Prolbem zaczyna się gdy trafiony == 100 i odp == 100 Wtedy nie wyswietla tekstu który powinien być wyswietlony.
Warunek dla trafiony 100, odp <= od b i od <100 działa poprawnie.
Kod testowałem wiele razy,a nawet bardzo wiele, dlatego bezwzglednie wykluczam możliwośc że nie wylosowało mi trafiony 100 odp 100.
Włosy sobie wyrywam z głowy bo za cholerę nie moge dojść do tego czemu skrypt sypie się w tym miejscu
nospor
Cytat
Kod testowałem wiele razy,a nawet bardzo wiele, dlatego bezwzglednie wykluczam możliwośc że nie wylosowało mi trafiony 100 odp 100.
Zabawne... ale wiesz ze obie 100 mają sie wylosować w tym samym czasie, co jest mało prawdopodobne...

Nie mozesz zamiast losowac poprostu podstawic za te zmienne 100 i w ten sposob sie przekonac czy kod dziala jak ma dzialac? To dość oczywiste.
44x
Może i przesadziłem z tym że wiem,tu się z tobą zgodzę. Stwierdziłem to gdyż raz na xxx razy skrypt się wali nie wyswietlając nic. Cały swhitch jest dodatkowo wrzucony w pętle co w jakimś stopniu podnosi prawdopodobienstwo wylosowania 2x 100 (wiecej losowan przy jednym odpaleniu)
Gdy podstawilem pod warunki 100/100 wykonało się. Co poniekąd obala moją teorię że trafiłem. Co nie zmienia faktu że wylosowałem kazda możliwoą opcję poza tą jedną,a skrypt na xxx razy wywala mi puste pole.

Zmniejsze warunki zobacze jaki to przyniesie skutek. Być może w innym miejscu jest błąd dlatego wywala mi puste pole a ja faktycznie nie trafilem 100/100
nospor
Cytat
Gdy podstawilem pod warunki 100/100 wykonało się.
No, takze jak masz jakis blad to zdecydowaie gdzie indziej. Na przyszlosc pomysl chwilkę a nie losuje milion razy by uzyskać daną kombinację wink.gif

ps:
case $odp <= $b && $odp < 100:
nigdzie nie masz warunku
case $odp > $b && $odp < 100:
i jak takie cos zajdzie, to wlasnnie bedziesz miał pusto.
44x
Hmmm zrobiłem jak mowiłem nawet dla pewnosci dodałem smarta zeby pokazywało mi wynik z losowania odp.

  1. [...]
  2. case $trafiony == 100:
  3.  
  4. $odp=rand(1,100);
  5. $smarty -> assign ("Error", "<center>odp= $odp</center>");
  6. $smarty -> display ('error.tpl');
  7. switch ($odp)
  8. {
  9. case $odp <= $czary && $odp < 50:
  10. $smarty -> assign ("Error", "<center> Udało się</center>");
  11. $smarty -> display ('error.tpl');
  12. break;
  13. case $odp == 50:
  14. $smarty -> assign ("Error", "<center> Nie udalo sie</center>");
  15. $smarty -> display ('error.tpl');
  16. break;
  17. }
  18. break;
  19.  
  20. }
  21.  


Efekt:
odp= 70 nie wyswietlilo tekstu o tym że się nie udało

odp= 27 działa jak nalezy.
Udało się

Obiektywny test przeprowadziłem ;>
Jeśli potrzebujesz podkladki wrzuce ci screen.


nospor
Cytat
odp= 70 nie wyswietlilo tekstu o tym że się nie udało
Kurcze... a niby czemu mial wyswietlic tekst?? Przeciez w kodzie co teraz pokazales zaden nie spelnia warunku dla odp70...
44x
facepalmxd.gif Zaraz zmienie warunek i sprawdze to jeszcze raz.


Edit:
Pomysł żeby dodać smarta wyswietlajacego wynik odp nie był głupi. Ja byłem głupi że go nie dodałem zanim zmarnowałem Twój czas kolego wink.gif

Puste pole to brak warunku case a ja moze i faktycznie nie trafilem 100/100

W takim razie mój problem nie leży w
  1. case $odp == 100:
  2. $smarty -> assign ("Error", "<center> Nie udalo sie</center>");
  3. $smarty -> display ('error.tpl');
  4. break;


tylko w

  1. case $odp <= $b && $odp < 100:
  2. $smarty -> assign ("Error", "<center> Udało się</center>");
  3. $smarty -> display ('error.tpl');
  4. break;



Postaram się juz sam do tego dojść.
Pozdrawiam i dzieki że nie pokazałes palcem a zmusiłes do myslenia. wink.gif
Mam nadzieje że uda się to rozwiazać.

Edit 2
Jednak wskazałes miejsce błedu tylko ja nie doczytałem Twojego postu. Mimo to dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.