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

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

新規登録して質問してみよう
ただいま回答率
85.48%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Go

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

Q&A

解決済

2回答

770閲覧

Go言語の標準入力で使うbufio.Scan()でfalseを出す方法を知りたいです。

HearthXml

総合スコア51

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Go

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

0グッド

0クリップ

投稿2019/08/21 14:55

編集2019/08/21 15:05

main.gosc.Scan()でfalseを返して正常に文字列を読み込めませんでした。と表示したいです。
main.goにecho "" | go run main.goで空文字を渡しても、go run main.goで空文字で入力してもエラーは出ません。
リファレンスを読みましたが、どういう条件でfalseが返ってくるかわかりませんでした。
sc.Scan()でいちいちチェックするのは無駄なんでしょうか。

main.go

GO

1package main 2import ( 3 "fmt" 4 "bufio" 5 "os" 6) 7func main(){ 8 var sc = bufio.NewScanner(os.Stdin) 9 if !sc.Scan() { 10 fmt.Println("正常に文字列を読み込めませんでした。") 11 os.Exit(1) 12 } 13 fmt.Println(sc.Text()) 14}

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

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

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

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

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

meg_

2019/08/21 15:33

読みこみが終了したときにfalseになると思いますが、違いますか?
HearthXml

2019/08/24 23:04

そこもよく分かっていません。
guest

回答2

0

Windowsならば
go run main.go < nultype nul | go run main.go
もしくは、起動後にctrl+zを入力しEnter

Linux/Unixならば
go run main.go < /dev/nullcat /dev/null | go run main.go
もしくは、起動後にctrl+dctrl+zを入力しEnterが必要だったらいらなかったり
ターミナルエミュレータによって変わるような気がします。

投稿2019/08/22 00:02

asm

総合スコア15147

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

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

0

ベストアンサー

if !sc.Scan()をfor sc.Scan()に変えて、sc.Text()のある行はループの中に入れましょう。
空文字を渡しただけのつもりでも空文字とEOFの二つが渡されるので、二回以上スキャンしないと判定できません。
また、エラーについてですが、正常でないかどうかはsc.Err()の値をチェックしましょう。

go

1package main 2 3import ( 4 "bufio" 5 "fmt" 6 "os" 7) 8 9func main() { 10 var sc = bufio.NewScanner(os.Stdin) 11 for sc.Scan() { 12 if err := sc.Err(); err != nil { 13 fmt.Println("正常に文字列を読み込めませんでした。") 14 os.Exit(1) 15 } 16 fmt.Println(sc.Text()) 17 } 18}

投稿2019/08/21 23:15

編集2019/08/22 02:01
nobonobo

総合スコア3367

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問