weemiee
@weemiee (weemiee)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【C言語】n個の値を sscanf したい

Q&A

Closed

sscanf()を使用して、もともと個数を決めていないint型の整数を一度に入力 (標準入力) する方法を知りたいです。

誤ったプログラム
#include <stdio.h>

int main(){
	
	char buf[1000];
	int n, num[100];
	
	fgets(buf, sizeof(buf), stdin);
	sscanf(buf, "%d", &n);
	
	for(int i = 0; i < n; i++){
		fgets(buf, sizeof(buf), stdin);
		sscanf(buf, "%d", &num[i]);
	}
	
	printf("%d\n", num[2]);
	
}

上のプログラムは、入力したい数値の個数を変更可能で、数値それぞれを順番に配列 num に入れ、出力結果として num の2番目の要素が表示されるのを期待して作ったものです。例えば下の図で、1行目に個数である 5 、2行目に要素である 2, 4, 7, 6, 3 を入力した時、3番目の要素にあたる 7 を出力するといった感じです。

入力
5
2 4 7 6 3
出力
7

入れたい数字を1つのsscanf()にまとめれば、いちいちfgets()を書かなくても1回で処理されます。しかし今回は、予め変数の個数を決めていないので、sscanf()のフォーマット部分("%d %d %d ...")をどのように書けば良いのか分からず 困っています。

0

1Answer

質問にあるような、「読む個数は複数だけど、結果を得られるのは1つでいい」というのであれば、%*dとして不要な箇所を読み捨てることで、一気に該当の場所だけ得ることが可能です。

一方で、「n個読んで、そのすべての結果を得たい」という用途の場合は、可変長引数として渡す引数の個数を可変させるような手段はないので、sscanf一発で、とはいきません。

1Like

Your answer might help someone💌