• ベストアンサー

C言語で数値の受取

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答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

  • C言語です。

    C言語について…配列を使うときにa[]を使いますが、例えば要素数を10個とすればa[10]ですよね? ではa[n]としてprintf("n=");scanf("%d",&n);でその度に要素数を変えることはできないのですか?エラーが出てきてしまいます。

  • 2進数の足し算(C言語)

    C言語初学者です。 タイトル通り、2進数の足し算をするプログラムを作っていますが、行き詰ってしまいました。 特に、桁上げをどうするか悩んでいます。 今の自分の考えでは、入力された数値を10で割り、その余りを足していけばできると思っていたのですが、やはり桁上げや繰り上がりに悩んでいます。 全然できてませんが以下ソースです。 #include <stdio.h> int main(void) { int a, b, i; do { printf("8桁以下の非負の2進数を入力してください(1つ目): "); scanf("%d" ,&a); if (a < 0) puts("負の数を入力しないでください。"); } while (a < 0); do { printf("8桁以下の非負の2進数を入力してください(2つ目): "); scanf("%d" ,&b); if (b < 0) puts("負の数を入力しないでください。"); } while (b < 0); a = a % 10; b = b % 10; よろしくお願いします。

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • C言語について

    「キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。」という問題で私は、 #include <stdio.h> void main(void) { float A; float a,b,c,d,e,f,g,h,i,j; printf("実数を入力してください:"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&d); scanf("%f",&e); scanf("%f",&f); scanf("%f",&g); scanf("%f",&h); scanf("%f",&i); scanf("%f",&j); A=(a+b+c+d+e+f+g+h+i+j)/10; printf("平均は%fです.\n",A); } と考えたのですが、もっとすっきりとしたプログラムはないのでしょうか?もっとシンプルにしたいのです。教えて下さい。よろしくお願いします。

  • C言語(高校1年の内容)について

    C言語のプログラムが分かりません。教えて下さい。 --------------------------------------- 課題3(kadai3.c) 次のプログラムでは、割り算が正しく行われないので、直しなさい。 LIST 3-1 1 /* 1500 工業太郎 */ 2 #include <stdio.h> 3 int main(void) 4 { 5 int a,b,wa,sa,seki,syo; 6 printf("数値を一つ入力してください ->"); 7 scanf("%d", &a); 8 printf("数値をもう一つ入力してください ->"); 9 scanf("%d", &b); 10 wa = a + b; 11 sa = a - b; 12 seki = a * b; 13 syo = s / b; 14 printf("a + b = %d\n", wa); 15 printf("a - b = %d\n", sa); 16 printf("a * b = %d\n", seki); 17 printf("a / b = %d\n", syo); 18 return 0; 19 } --------------------------------------- といった内容です。本当によく分かりません。助けて下さい。

  • C言語 

    C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }

  • C言語でファイルの入出力

    C言語についての質問です。 統計学のシュミレータを作っていまして 大量の数値データ(1000程度)のデータを入力する必要があるのですが scanfなどで入力要求するには、数に無理がありますので 外部テキストファイルからプログラムに読み込みたいのですが 方法が分かりません。 希望としては、まずテキストファイルに 1000個の数値データを入力しておいて (数値データのみをコンマとか改行で区切ったものをあらかじめ作成しておく) それを1000個の配列 int data[1000]に 順番にインポートできるようにしたいです。 データ数は1000個で固定、すべてint型でOKです。 数値として処理したいので 文字列としてインポートしてしまうのはダメです。 あくまでint型の数値として考えてください。 回答よろしくお願いします。

  • 至急で、C言語の問題で解答解説お願いします。

    1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。

  • C言語で、数値の桁数を求めるには??

    C言語で数値の桁数を求めるプログラムをもとめたいのですが どうすればいいのでしょうか int c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。

  • C言語のscanf関数についての質問です。

    閲覧ありがとうございます。 C言語についての質問です。 nと、2つのn×n行列の各成分をキーボードから入力し、 その和を計算するプログラムを作ろうとして i,j,と行列二つの配列(a[n][n]とb[n][n])をintで定義した後、 printf("行列aの成分を入力してください。\n"); for(i=0; i<=n-1; n++) {for(j=0; j<=n-1; j++) { scanf("%d",&a[i][j]); } } printf("行列bの成分を入力してください。\n"); for(i=0; i<=n-1; n++) {for(j=0; j<=n-1; j++) { scanf("%d",&b[i][j]); } } というプログラムを書いてn=3としたのですが、 「行列aの成分を入力してください」と表示されて 例えば「1 2 3 4 5 6 7 8 9」と入力してEnterキーを押しても 「行列bの成分を入力してください」という文が表示されません。 C言語を学び始めてまもないので、 まだ基本的なところが理解できていないかもしれません。 何が原因だかわかる方、解答頂けると嬉しいです。

専門家に質問してみよう