sor********sor********さん2021/1/18 3:4522回答c言語についての質問です。c言語についての質問です。 標準入力からa1 a2…aNという風に空白区切りでN個の数を受け取ってループ処理で配列に代入したいのですが、fgetsとsscanfで標準入力する場合はどうすればいいですか?…続きを読むC言語関連 | プログラミング・16閲覧共感したベストアンサーhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q142374354390WindcatWindcatさんカテゴリマスター2021/1/18 10:25例: #include <stdio.h> int main(void){ char str[128]; char *p; int dt[128]; int i=0,n,f; p=str; printf("data >"); fgets(str,127,stdin); while((f=sscanf(p,"%d",&n)) >0){ dt[i] = n; i++; while(*p != ' ')p++; p++; } for(n=0;n<i;n++){ printf("%3d: %d\n",n,dt[n]); } return 0; } --------------------------------------- data >1 2 3 4 5 10 20 30 40 50 0: 1 1: 2 2: 3 3: 4 4: 5 5: 10 6: 20 7: 30 8: 40 9: 50ナイス!
ベストアンサーhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q142374354390WindcatWindcatさんカテゴリマスター2021/1/18 10:25例: #include <stdio.h> int main(void){ char str[128]; char *p; int dt[128]; int i=0,n,f; p=str; printf("data >"); fgets(str,127,stdin); while((f=sscanf(p,"%d",&n)) >0){ dt[i] = n; i++; while(*p != ' ')p++; p++; } for(n=0;n<i;n++){ printf("%3d: %d\n",n,dt[n]); } return 0; } --------------------------------------- data >1 2 3 4 5 10 20 30 40 50 0: 1 1: 2 2: 3 3: 4 4: 5 5: 10 6: 20 7: 30 8: 40 9: 50ナイス!
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q142374354390はらがくろいこはらがくろいこさん2021/1/20 19:17こうします。 #define _CRT_SECURE_NO_WARNINGS // Visual Studio only #include <stdio.h> int main(void) { int a[100]; char buf[100]; printf("data > "); // fgetsは最大第二引数-1個の文字を読み込みます。改行文字も格納します。 // https://ja.cppreference.com/w/c/io/fgets fgets(buf, sizeof buf, stdin); int N = 0; // データの個数 int val; // データの値 char *p = buf; // %nはそれまでに読み込んだ文字数を返します(今回はcへ)。 // https://ja.cppreference.com/w/c/io/fscanf // 今回sscanfは整数の読み取りに成功したときは1を返します。 for (int c; sscanf(p, "%d%n", &val, &c) > 0; p += c) a[N++] = val; for (int i = 0; i < N; ++i) printf(" %d", a[i]); printf("\n"); }ナイス!