• ベストアンサー

C言語で数値の受取

C言語で横に並んだスペース区切りの数値を受取り配列に収めたいたいのですがどうしたらいいでしょうか? 入力:3 4 5 scanf("%d %d %d", &a, &b, &c); の様にしたいのですが受け取る数値の数はその都度変わります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

fgetsして、strtokして、atoiする strtokのサンプル。 #include <string.h> #include <stdio.h> main () { char text[] ="12 34 56 7"; char *p; char *q; char dlm[] = " "; p = text; while( q=strtok(p,dlm) ){ printf("%d\n", atoi(q)); p=NULL; } }

ashitanotenki11
質問者

お礼

ありがとうございました

その他の回答 (1)

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 数字の個数が変わるのであれば、自分で、行の内容を解析していくしかありませんね。  いずれにせよ、例えば、「1,2,3,4」とか、「1a2a3a4a5だよ」とかおかしな入力の処理も必要ですから、scanf一発で入力から離れた方が良いでしょう。  一番簡単なのは、 while( (ch=getc(fh)) != EOF)  で、一文字ずつ入力し、chが数字か、区切り文字か不正な文字かを判定し、 数字なら、前回読み込みの数字を10倍して今の数字を足す。区切り文字なら、数字の配列を進める、不正文字ならエラー処理をする。  というのをループで回すのが素直でしょうか。  これなら、区切り文字が空白だけとは限らず、「,」でも「;」でも、それらが混じっても良いとするのでも、解釈次第で好きなように処理できます。  文字から、数字への変換は、atoiを使用すれば良いでしょう。 chを char ch[2]; と宣言し、ch[1]=null; で初期化しておき、while文中のchをch[0]としておけば、suuji = suuji*10+atoi(ch); で、片が付きます。

ashitanotenki11
質問者

お礼

ありがとうございました

関連するQ&A