Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z instrukcją switch
44x
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.03.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
44x
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.03.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
44x
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.03.2015

Ostrzeżenie: (0%)
-----


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.


Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
44x
post
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.03.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował 44x 3.03.2015, 18:11:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 21:16