• 締切済み

スペースで区切った3つの数値の大小を比較する

C初心者です。 たとえば「32 49 67」と入力させて、 その大小を比較するプログラムを書きたいんですが、 どうやって数値をひろっていいのか分かりません;; int型でたとえばiocharという変数を宣言して while( (iochar = getchar()) != EOF)とか書いてみても putchar(iochar)で表示することはできても 32、49、67を独立した数値として扱ってはくれないですよね……? さらに表示したあとプログラムが終了しないので exit()を使ってみたんですけど変化なくて; while(){}の中に入れちゃうとputchar(iochar)が最初の1文字を 表示しただけで終了しちゃうし……。 初歩の初歩で申し訳ないんですけど、何かいい解決策があれば 教えてもらえると助かりますorz

みんなの回答

回答No.4

こんなやり方もあります。 #include<stdio.h> #include<string.h> //strtok()用 #include<stdlib.h> //atoi()用 void main(void) { char str[] = "32 49 67"; char *tp; int num[3]; int count; tp = strtok( str, " " ); //文字列を区切る関数 count = 0; while (tp != NULL && count < sizeof(num) / sizeof(num[0])) { num[count++] = atoi(tp); //文字列を数値にかえる関数 tp = strtok( NULL," "); } printf("%d,%d,%d",num[0],num[1],num[2]); }

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>C初心者です。  No1, 2 さんの方法のほうが「勉強」のためには良いかと思いますが・・。  (いろんな方法を試して下さい) ★コマンドラインから入力する方法も、あります。  実行例: Z:\>test.exe 32 49 67  test.c の main() 関数部分  int main( int argc, char *argv[] )  argv[0] に test.exe という文字列が入ります。  argv[1] に 32 という文字列が入ります。  argv[2] に 49   〃  argv[3] に 67   〃 ★整数文字列は、atoi() 関数で数値に変換できます。 >何かいい解決策があれば、 ☆「いい」かどうかは別として、標準仕様です。

参考URL:
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide67-1.html
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

fgets()を使って、いったん"32 49 67"という文字列として 受け取ります。 その後、sscanf()を使って、3つの数値に変換します。

回答No.1

3桁以内の数値を3つ入力すると仮定します。 int i char mojiretu[32] char suji[3][3] // キーボードからの入力をmojiretuに取りあえず格納する while( (iochar = getchar()) != '\n' ){ mojiretu [i++] = putchar(iochar) } 次に、mojiretuをスペースが検出される毎に suji[0] suji[1] suji[2] に切り出す (¥0の処理を忘れずに) あとは、3つのsuji配列を atoi で数値化しては如何でしょうか?

関連するQ&A