普段思ったことや、雑記。

Menu & Search

C言語でscanfの直後のfgetsが動かない場合の対応

2019年8月18日

C言語をちゃんとやろうと、HackerRankの問題を解き出したところでCの標準入力でちょっとしたワナにかかった。
変に色々調べてしまって、小一時間使ってしまった。問題は、このようなコードがあったとして、入力受付が2回発生すると思いきや、そうはならない。

原因としては、fgetsが改行コードから読み出しを開始するようで、fgets直前のscanfしている行をこのように変更すれば意図するように動作する。

問題の解決には、下記のStack Overflowの記事を参照した。

Input in C. Scanf before gets. Problem – Stack Overflow
https://stackoverflow.com/questions/2366509/input-in-c-scanf-before-gets-problem

記事によると、他にも色々やり方があるようで、scanfに改行をつけないで、fgetsのあとでsscanfをするなどのパターンもあるらしい。

C言語は今年のGWのcatコマンド写経からやっておらず、そもそも問題を解くというのは大学ぶりかもしれない。最初はfgetsではなくてgetsをしていたら、非推奨とコンパイラに怒られるし、Cは色々と奥が深そうだ。

Article Tags
mmiyauchi

プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。

Related article

Pythonが好きではないいくつかの理由

Pythonコードを…

C言語のmain関数の引数(コマンドライン引数)についてなんとなく面白いと思ってしまった

2019年5月3日 …

Vueの製品レベルの環境構築を時短でおこなうチュートリアル

Vueの製品レベルの環境構築を時短でおこなうチュートリアル

2019年9月16日…

Discussion about this post

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Type your search keyword, and press enter to search
%d人のブロガーが「いいね」をつけました。