- ベストアンサー
数字の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までしか取り込めませんでした。 どなたか良い方法を教えてください。
- みんなの回答 (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さん、調査報告ありがとうございました。)
その他の回答 (12)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#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; }
お礼
回答ありがとうございます。 使った事ない関数があったりするので、いろいろと確かめながら試してみます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
12 3 と入力されたら、12 と 3 ですか? 1 と 2 と 3 ですか?
補足
1と2と3です
- 1
- 2
お礼
回答ありがとうございます。 実行できました。ありがとうございました。