• ベストアンサー

数字のINPUT

数字を連続して、入力させようと思っています。 例 1,2,3   1 2 3   1, 2, 3, ⇒a[0]=1,a[1]=2,a[2]=3 上の例の様に、数字が出てくれば、その数字だけをint型で使えるようにint型の配列に格納したいです。 scanf()を使って%dでやるとバグが発生します。 gets()などでchar型でとった物をatoi()で変換する方法がよく分かりません。 私がやると、9までしか取り込めませんでした。 どなたか良い方法を教えてください。

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

  • ベストアンサー
回答No.13

別の方法を考えてみました。 ---------------------------------------------------------------- #include <stdio.h> #include <string.h> void main() {  int a[ 3 ];  char buf[ 256 ];  char *p;  int count = 0;  // 入力  gets( buf );  p = buf;  while( *p != '\0' )  {   // 数字がある所までシフトする   p += strcspn( p, "1234567890" );   // 数値の抽出   sscanf( p, "%d", &a[ count++ ] );   // 数字以外の所までシフトする   p += strspn( p, "1234567890" );  }  // 表示  printf("%d %d %d\n", a[0], a[1], a[2] ); } ---------------------------------------------------------------- 関数の説明: strcspn( p, "1234567890" ) : 先頭から数字以外で構成される長さを取得する  (例) "abc1234efg" なら "abc"の部分が該当するので結果は3である strspn( p, "1234567890" ) : 先頭から数字で構成される長さを取得する  (例) "1234efg" なら "1234"の部分が該当するので結果は4である 今回のはどうでしょうか? またわからない箇所がありましたら 追って質問してくださいね(^_^) (PS:BLUEPIXYさん、調査報告ありがとうございました。)

miniture_min
質問者

お礼

回答ありがとうございます。 実行できました。ありがとうございました。

その他の回答 (12)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_SIZE 10 int main(void){ char buff[128]; int a[10]; int i,c; char *p, *token; printf("数字の入力>"); fgets(buff, 128, stdin); printf("%s",buff); c=0; p=buff; while(NULL!=(token=strtok(p, ", \t\n"))){ if(c<ARRAY_SIZE) a[c++]=atoi(token); p=NULL; } for(i=0;i<c;i++) printf("a[%d]=%d\n",i ,a[i]); return 0; }

miniture_min
質問者

お礼

回答ありがとうございます。 使った事ない関数があったりするので、いろいろと確かめながら試してみます。

回答No.1

12 3 と入力されたら、12 と 3 ですか? 1 と 2 と 3 ですか?

miniture_min
質問者

補足

1と2と3です

関連するQ&A