[Go][AtCoder] 入門問題1 fmt.Scanf関数 を使った標準入力受け取りについて

お急ぎの方へ 結論のコード

問題(以下、AtCoderからの引用)

時間制限 : 2sec / メモリ制限 : 256MB

問題文

高橋君はデータの加工が行いたいです。

整数 a,b,cと、文字列 s が与えられます。 a+b+c の計算結果と、文字列 s を並べて表示しなさい。

制約
1≤a,b,c≤1,000
1\leq|s|\leq 100

入力

入力は以下の形式で与えられる。

a
b c
s

出力

a+b+c と s を空白区切りで 1 行に出力せよ。

また、出力の末尾には改行を入れること。

例1

1
2 3
test
6 test

1+2+3 は 6 なので、上記のように出力します。

例2

72
128 256
myonmyon
456 myonmyon

72+128+256 は 456 なので、上記のように出力します。

回答と解説

回答したコード

package main

import "fmt"

func main(){
    var a, b, c int
    var s string
    fmt.Scanf("%d", &a)
    fmt.Scanf("%d %d", &b, &c)
    fmt.Scanf("%s", &s)
    fmt.Println(a+b+c,s)
}

今回の問題は、入門問題らしい、非常に簡潔なものです。
要は、標準入力を受け取り、それらを足して出力するだけ…といったものです。

標準入力を受け取る方法はいくつかありますが、今回はfmtパッケージのScanf関数を使いました

使い方は、ごちゃごちゃ説明するよりも、コードを見て頂ければ一目瞭然かと思います。

fmt.Scanf関数は&を忘れずに

ポイントは、

&をつけて、変数からポインタを抽出した状態で使うという点かと思います。

さらに、Goは型付き言語です。
第一引数の方には、%d%sのように、型を指定してあげましょう。

以下、主な書き方です。

書き方
論理値(bool)%t
符号付き整数(int, int8など)%d
符号なし整数(uint, uint8など)%d
浮動小数点数(float64など)%g
複素数(complex128など)%g
文字列(string)%s

最後に

ざっくりした解説ですが、今回は以上です。
また、間違えている点などありましたら、お気軽にコメント頂けると嬉しいです。
最後まで、ありがとうございました。

参考

AtCoder
fmt.Printlnなんかこわくない

PON3

PON3

5年くらい前に、30代完全未経験から独学でWeb系のソフトウェアエンジニアになった人。 現在はフリーランスエンジニアとして、大阪の自宅からフルリモートで東京の自社開発企業のお仕事をしている。 主戦場はバックエンドで、Go言語でのAPI開発や、Pythonでのデータ分析が武器。 とは言いつつ、フロントエンドをSPAを実装したり、IaCでクラウドインフラの設計構築したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と2歳になる娘の3人暮らし。 何かご用件がある方は、TwitterのDMからどうぞ。