質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1146閲覧

Go言語のforループとScanfについて

miyatoshi24

総合スコア17

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/04/18 05:22

Go言語のforループとScanfについて質問があります。
以下のソースコードでは、

  1. fmt.Scanfで標準入力を受けとり**input**にいれる
  2. **count**をインクリメントする
  3. **inputcount**を出力する
  4. 1~3を10回繰り返す
  5. ループを抜ける

という処理を想定してかいたのですが、

  1. fmt.Scanfで標準入力を受けとり**input**にいれる
  2. **count**をインクリメントする
  3. **inputcount**を出力する
  4. 1をとばす
  5. **count**をインクリメントする
  6. input(未入力のまま)と**count**を出力する
  7. 1~6を5回繰り返す
  8. ループを抜ける

という処理をしているようなのです。

Scanfは一回一回標準入力を受けとるものではないのでしょうか。
また、想定していた動きをさせるにはどう修正すれば良いでしょうか。

まだGo言語をはじめたばかりなのですが、
よろしくお願いいたします。

###ソースコード

go

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 count := 0 9 for { 10 var input int 11 fmt.Scanf("%v", &input) 12 count++ 13 fmt.Printf("input : %v\n", input) 14 fmt.Printf("count : %v\n", count) 15 if count == 10 { 16 break 17 } 18 } 19}

###処理結果

1 input : 1 count : 1 input : 0 count : 2 2 input : 2 count : 3 input : 0 count : 4 3 input : 3 count : 5 input : 0 count : 6 4 input : 4 count : 7 input : 0 count : 8 5 input : 5 count : 9 input : 0 count : 10

###実行環境
OS : Windows 10 Home
バージョン : 1903
ビルド : 18362.778
Go : go1.14.2 windows/amd64
エディタ : Visual Studio Code(1.44.2)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Windows でのこの fmt.Scanf の挙動は Go のバグなのです。

公式リポジトリの Isuue にも上がっています。
https://github.com/golang/go/issues/23562

解決方法は以下のように Scanf の際に末尾に \n をつける ことです。

diff

1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 count := 0 9 for { 10 var input int 11- fmt.Scanf("%v", &input) 12+ fmt.Scanf("%v\n", &input) 13 count++ 14 fmt.Printf("input : %v\n", input) 15 fmt.Printf("count : %v\n", count) 16 if count == 10 { 17 break 18 } 19 } 20}

投稿2020/04/18 06:25

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyatoshi24

2020/04/18 08:28

公式リポジトリを確認することを失念しておりました。 あと、アドバイス通り\nを入れたら想定した動きになりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問