- 締切済み
スペースで区切った3つの数値の大小を比較する
C初心者です。 たとえば「32 49 67」と入力させて、 その大小を比較するプログラムを書きたいんですが、 どうやって数値をひろっていいのか分かりません;; int型でたとえばiocharという変数を宣言して while( (iochar = getchar()) != EOF)とか書いてみても putchar(iochar)で表示することはできても 32、49、67を独立した数値として扱ってはくれないですよね……? さらに表示したあとプログラムが終了しないので exit()を使ってみたんですけど変化なくて; while(){}の中に入れちゃうとputchar(iochar)が最初の1文字を 表示しただけで終了しちゃうし……。 初歩の初歩で申し訳ないんですけど、何かいい解決策があれば 教えてもらえると助かりますorz
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nyororo-n
- ベストアンサー率50% (1/2)
こんなやり方もあります。 #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)
>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() 関数で数値に変換できます。 >何かいい解決策があれば、 ☆「いい」かどうかは別として、標準仕様です。
- asuncion
- ベストアンサー率33% (2127/6289)
fgets()を使って、いったん"32 49 67"という文字列として 受け取ります。 その後、sscanf()を使って、3つの数値に変換します。
- tomoyochan
- ベストアンサー率33% (7/21)
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 で数値化しては如何でしょうか?