前提・実現したいこと
プログラミング初心者です
最近Go言語の学習を始め
手始めに簡易な○×ゲームを作成しようと考えたのですが
二回目のscanfにて
意図しない動作をしたので質問させていただきます
予定している動作にならない理由と、
解決方法を教えていただきたいです
コンパイルエラーは出ておりません
該当のソースコード
GO
1package main 2 3import ( 4 "fmt" 5 "strings" 6) 7 8var ( 9 flag bool 10 first, second int 11 12 board = [][]string{ 13 []string{"-", "-", "-"}, 14 []string{"-", "-", "-"}, 15 []string{"-", "-", "-"}, 16 } 17) 18 19func input(board [][]string) { 20 for { 21 fmt.Println("あなたのターンです 丸を付ける箇所を入力してください") 22 fmt.Scanf("%d %d", &first, &second) 23 24 switch { 25 case first < 0 || second < 0: 26 fallthrough 27 case first > 2 || second > 2: 28 fmt.Println("0 ~ 2 の値で入力して下さい") 29 continue 30 case board[first][second] == "○" || board[first][second] == "×": 31 fmt.Println("既に値が格納されています") 32 continue 33 default: 34 board[first][second] = "○" 35 return 36 } 37 } 38} 39 40func print() { 41 for i := 0; i < len(board); i++ { 42 fmt.Println(strings.Join(board[i], " ")) 43 } 44} 45 46func result() { 47 fmt.Println() 48 return 49} 50 51func main() { 52 fmt.Println("●×ゲームです あなたは●で先行です") 53 for { 54 55 //ユーザーが値を入力する 56 input(board) 57 58 //結果の出力 59 print() 60 61 //勝利or敗北したときのbreak 62 //未実装 63 //if flag { 64 //result() 65 //} 66 } 67}
動作状況
●×ゲームです あなたは●で先行です
あなたのターンです 丸を付ける箇所を入力してください
1 1
:- - -:
:- ○ -:
:- - -:
あなたのターンです 丸を付ける箇所を入力してください
既に値が格納されています **二回目のscanfが入力しないままスルーされる**
あなたのターンです 丸を付ける箇所を入力してください
| **なぜか三回目のscanfは入力を待ってもらえる**
補足情報
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/15 08:08 編集
2020/03/15 08:19
2020/03/15 08:24 編集
2020/03/15 08:29
2020/03/15 08:39
2020/03/15 08:51 編集