[問題] C 語言的猜拳程式 (switch 好像被執行ꐠ…

看板C_and_CPP (C/C++)作者 ( )時間15年前 (2011/01/16 15:09), 編輯推噓2(207)
留言9則, 6人參與, 最新討論串1/1
開發平台(Platform): C 額外使用到的函數庫(Library Used): 問題(Question): 我的執行結果會多跑一次,但又覺得邏輯沒錯 but 有些情況又會正常....真的不知道哪裡的問題 餵入的資料(Input): 預期的正確結果(Expected Output): 這是一個猜拳程式 請玩家出拳(剪刀:0 石頭:1 布:2): 電腦出拳:剪刀/石頭/布 結果:勝/負/和 錯誤結果(Wrong Output): (譬如像這樣子...."結果"多跑一次) 這是一個猜拳程式 請玩家出拳(剪刀:0 石頭:1 布:2):1 電腦出拳:石頭 結果:和!布 結果:負! 程式碼(Code):(請善用置底文網頁, 記得排版) 原始檔:http://ppt.cc/-,x8 #include <stdio.h> #include <stdlib.h> #include <time.h> /* ===================== 電 腦 亂 數 出 拳 ==========================*/ int com() { int x; srand(time(NULL)); x=rand()%100; switch (x%3) //用取餘數的方式決定電腦出拳 { case 0: return 0; break; case 1: return 1; break; case 2: return 2; break; } } /*======================================================================*/ /*=========================== 主 程 式 =================================*/ int main() { int player,x; printf("這是一個猜拳遊戲\n\n"); printf("請玩家出拳(輸入\"剪刀為0、石頭為1、布為2\"):"); scanf("%d",&player); printf("\n"); printf("電腦出拳:"); x=com(); switch(x) // 判斷勝負 { case 0: // 電腦出剪刀 printf("剪刀\n"); switch(player) { case 0: printf("結果:和!"); break; case 1: printf("結果:勝!"); break; case 2: printf("結果:負!"); break; } case 1: // 電腦出石頭 printf("石頭\n"); switch(player) { case 0: printf("結果:負!"); break; case 1: printf("結果:和!"); break; case 2: printf("結果:勝!"); break; } case 2: // 電腦出布 printf("布\n"); switch(player) { case 0: printf("結果:勝!"); break; case 1: printf("結果:負!"); break; case 2: printf("結果:和!"); break; } } printf("\n\n"); system("PAUSE"); return 0; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.154.3 ※ 編輯: andywu322 來自: 218.164.154.3 (01/16 15:11)

01/16 15:15, , 1F
很簡單,問題出在外層的switch內,每個case結尾沒加上break
01/16 15:15, 1F

01/16 15:15, , 2F
外面的少break
01/16 15:15, 2F

01/16 15:46, , 3F
哈哈...原來是這樣....我發現我好白癡喔 XDDDD
01/16 15:46, 3F

01/16 15:46, , 4F
我以為裡面的break就可以兼著用了
01/16 15:46, 4F

01/16 15:47, , 5F
不過這樣居然編譯沒問題....好奇妙 ~"~
01/16 15:47, 5F

01/16 15:51, , 6F
感謝一二樓兩位前輩的指導!!
01/16 15:51, 6F

01/16 16:37, , 7F
Switch沒加Break編譯當然會過 有一些用法也會特地不加
01/16 16:37, 7F

01/16 20:37, , 8F
double dispatching
01/16 20:37, 8F

01/25 21:57, , 9F
不用特別寫 x=rand()%100 再寫switch(x%3) 吧
01/25 21:57, 9F
文章代碼(AID): #1DCfcaFw (C_and_CPP)
文章代碼(AID): #1DCfcaFw (C_and_CPP)