質問 |
||
| 質問者:hx6d6b | スペースで区切った3つの数値の大小を比較する | |
|---|---|---|
困り度:
|
C初心者です。 たとえば「32 49 67」と入力させて、 その大小を比較するプログラムを書きたいんですが、 どうやって数値をひろっていいのか分かりません;; int型でたとえばiocharという変数を宣言して while( (iochar = getchar()) != EOF)とか書いてみても putchar(iochar)で表示することはできても 32、49、67を独立した数値として扱ってはくれないですよね……? さらに表示したあとプログラムが終了しないので exit()を使ってみたんですけど変化なくて; while(){}の中に入れちゃうとputchar(iochar)が最初の1文字を 表示しただけで終了しちゃうし……。 初歩の初歩で申し訳ないんですけど、何かいい解決策があれば 教えてもらえると助かりますorz |
|
質問投稿日時:08/03/20 05:41 質問番号:3878271 |
||
回答 |
|
| 回答者:nyororo-n | こんなやり方もあります。 #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]); } |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/21 23:35 回答番号:No.4 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:yama5140 | >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() 関数で数値に変換できます。 >何かいい解決策があれば、 ☆「いい」かどうかは別として、標準仕様です。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/21 09:31 回答番号:No.3 |
|
| 参考URL: | http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide67-1.html |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:asuncion | fgets()を使って、いったん"32 49 67"という文字列として 受け取ります。 その後、sscanf()を使って、3つの数値に変換します。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/20 06:47 回答番号:No.2 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:tomoyochan | 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 で数値化しては如何でしょうか? |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/20 06:24 回答番号:No.1 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |