Redux(react-redux)における適切な配列要素の更新
2021年8月23日…
C言語をちゃんとやろうと、HackerRankの問題を解き出したところでCの標準入力でちょっとしたワナにかかった。
変に色々調べてしまって、小一時間使ってしまった。問題は、このようなコードがあったとして、入力受付が2回発生すると思いきや、そうはならない。
scanf("%d", &i);
fgets(str, 256, stdin);
原因としては、fgets
が改行コードから読み出しを開始するようで、fgets
直前のscanf
している行をこのように変更すれば意図するように動作する。
scanf("%d\n", &i);
fgets(str, 256, stdin);
問題の解決には、下記の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は色々と奥が深そうだ。
プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。
Discussion about this post