- 1 名前:静的領域の名無しさん mailto:sage [2008/08/12(火) 18:23:10 ]
- C言語の入門者向け解説スレです。
教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 114代目 pc11.2ch.net/test/read.cgi/tech/1216746971/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 33 pc11.2ch.net/test/read.cgi/tech/1217073697/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 321 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:19:55 ]
- Step数(大爆笑
- 322 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:20:19 ]
- 日立さん乙ですw
- 323 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:21:11 ]
- ステップ数ってあーた・・・・・
ロートルですか?
- 324 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:23:22 ]
- ごめん。たしかにロートルだ。
他にソースの長さを測る単位教えて若い人。
- 325 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:24:15 ]
- ソース長
- 326 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:24:50 ]
- 自分で考えろジジイ
- 327 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:25:54 ]
- 行数のことをステップ数いうのがアレなんだろ。
- 328 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:27:38 ]
- メインフレーム時代の名残だろうな
- 329 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:29:33 ]
- 昔は、行数でプログラムの値段を算出していたんだろ。
- 330 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:30:23 ]
- ソースの長さを測る意味がわからん
同じ仕事をやる100行のソースAと1000行のソースBで偉いのはどっち?
- 331 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:31:06 ]
- >>330
だから、>>329
- 332 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:34:17 ]
- >>331
ということは、長くだらだらと書く奴の方が簡潔に書く奴より高給を貰ってた訳か 狂ってるな
- 333 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:34:18 ]
- 可読性の話をしてると思ってたのだが。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:35:49 ]
- >>332
正直者はいつも馬鹿を見るのがこの世です
- 335 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:36:21 ]
- >>332
まー実際は予算も決まってるし、新規で行数書けばその分テスト件数も増やさないといけないとか いろいろあるのよ>日立の場合。
- 336 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:44:00 ]
- >>302
n = strspn(s, "ABCDEF・・・XYZ"); if (s[n] == '\0') return 0; else return -1; とすれば、ループもなくなるなと一瞬思ったけど、やっぱ"ABCDEF・・・"と書くのがダサいな。 isupperでまわしたほうがいいか。 あと、正常が0で、異常終了で-1ってのも、出題者のセンスが・・・
- 337 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:45:35 ]
- >>332
つか、メインフレームの作業体制は極度に分業が進んでいて コーダーという人は詳細フローを言語のコードに一行ずつ落とすだけ。 そういう環境だから、ステップ単価というのは有効だったんだよ
- 338 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:49:20 ]
- >>336
正常0は理にかなってるよ 正常は一通りしかないが、異常にはいろんなケースがある だから正常は0を返し、エラー時はエラーコードを返すほうがいい
- 339 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:53:14 ]
- >>338
だからウゼーって 独り言はチラシの裏にでも書いてろ
- 340 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:54:30 ]
- >>338
この場合は、エラーは一通りしかないじゃん。 bool値のかわりで、0と0以外のほうがいい。 それに、そういう思想だったら、-1じゃなくて、0とマイナス値としておかないとダメ。
- 341 名前:デフォルトの名無しさん [2008/08/18(月) 23:56:05 ]
- 多分この問題の次ではアルファベットじゃなかった文字数を返すようにしましょうって続くんだよ
きっとそうだよ
- 342 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:58:21 ]
- >>339
完全に反論の余地がない時は黙ってた方がいいですよ
- 343 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:59:58 ]
- どう見ても初学者用の問題なのにstrspnとかisupperつかってかえって混乱させようとしてるやつなんなの?
- 344 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:00:11 ]
- 入力がヌル文字列の場合はどっち?
- 345 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:04:42 ]
- >>343
ああ、そういえば再帰とかつかって、面白い回答にするの忘れてたな。
- 346 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:05:54 ]
- 今からでも遅くないからさっさとやれよ
- 347 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:12:35 ]
- >>343
標準ライブラリ関数を使うことの何が問題なんだかわからん string.hに定義されてるような車輪の再発明をやらせる方がよっぽど問題だ
- 348 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:13:05 ]
- >>342
反論の余地とかそういう問題じゃなくてお前がうざいの
- 349 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:14:15 ]
- >>348
しーっ!これ以上書くと頭が悪いことがばれますよ!
- 350 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:15:18 ]
- Cだと文字列の理解はC言語自体の理解にも多少は
繋がる気がするから再発明も完全に無駄だとは思わない俺
- 351 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:16:29 ]
- 文字列じゃなくて文字配列か
- 352 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:16:34 ]
- >>349
お前がな
- 353 名前:304 [2008/08/19(火) 00:22:21 ]
- >>302
じゃ初学者用に書くよ int CheckFunc(char *str) { int i; for(i = 0; str[i]; i++){ if ('A' > str[i] || str[i] > 'Z') return -1; } return 0; } >>344 0が返る
- 354 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:25:07 ]
- >>353
○strがNULLだと落ちる ○iは無くても書ける
- 355 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:26:59 ]
- 文字列に大文字以外が含まれているかどうか調べる関数って、どういう関数名が適切だと思う?
- 356 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:27:27 ]
- >>352
しーっ!これ以上書くと頭が悪いことがばれますよ!
- 357 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:28:01 ]
- >>354
引数にNULLを渡してはいけないという仕様です。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:29:43 ]
- >>313でおk
- 359 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:29:59 ]
- >>357
君の世界ではそれでいいのかもしれないが、俺の世界では文字列のNULLチェックを怠ったばかりに 落ちてしまうソフトが後を絶たないんだなこれが
- 360 名前:デフォルトの名無しさん [2008/08/19(火) 00:32:54 ]
- ポインタを渡す関数はnullかどうかひかくしなくてはいけないのですか?それが一般的ナのですか?
- 361 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 00:43:45 ]
- >>359
あなたの世界では、たとえばstrcat()にNULLを渡したときに、落ちずに正常に動作してますか? strcat()がNULLを渡しても動作するとしたら、どう動作すればいいですか?
- 362 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 01:04:20 ]
- パルプンテ
- 363 名前:デフォルトの名無しさん [2008/08/19(火) 01:14:15 ]
- そうだな、システムコールとかは異常が-1、正常がそれ以外だったりするしね。
- 364 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 02:40:04 ]
- >>361
顔が真っ赤ですよ
- 365 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 03:04:33 ]
- >>364
しーっ!これ以上書くと頭が悪いことがばれますよ! ってもう遅いけど
- 366 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 04:02:45 ]
- ポインタを渡された側がNULLかどうかをチェックしてもあまり役に立つとは思わないけど。
無効なポインタは別にNULLだけじゃないから、無効なポインタは渡す側の責任でしか回避できない。 もちろん渡された側でのNULLチェックで回避できる問題もある。 でも渡される側でNULLチェックを怠ったばかりにおちてしまうような関数の使い方をしているようなプロジェクトなら、 他にも無効なポインタを渡してしまうような潜在的な危険があったりするおそれも。 >>357の人も引数に渡してはいけないのはNULLとせず、無効なポインタとすべきだったと思う。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:43:53 ]
- NULLは呼んだほうの責任だからな。
まあassert入れといてもバチはあたらんと思うが。
- 368 名前:デフォルトの名無しさん [2008/08/19(火) 11:44:22 ]
- Visual Studio 2005とかだと、sprintfの代わりにsprintf_sを使えと警告をされるのですが、いちいち書き換えたくありません。
sprintf_sは、Visual Studioの独自の関数で、2番目に、文字列のサイズを引数に取ります マクロとかで解決できないでしょうか
- 369 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 11:46:23 ]
- #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
- 370 名前:デフォルトの名無しさん [2008/08/19(火) 11:50:42 ]
- >>369
ありがとうございます。まさにそれを探してました。
- 371 名前:デフォルトの名無しさん [2008/08/19(火) 12:30:24 ]
- #include <stdio.h>
#ifdef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES #undef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES #endif #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 int main( void ) { char fname[256]; // this causes 4996 warning sprintf( fname, "%s", "hogehoge" ); // this is safe version // sprintf_s( fname, sizeof(fname), "%s", "hogehoge" ); return true; } こんなシンプルなものでもまだwarningでるんですが。。。
- 372 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 12:32:15 ]
- #define _CRT_NON_CONFORMING_SWPRINTFS
というかMSDN嫁
- 373 名前:デフォルトの名無しさん [2008/08/19(火) 12:32:37 ]
- すいません。
#include <stdio.h>を後にしたらできました。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 12:34:47 ]
- あ。悪い
>>372は関係ないわ #pragma warning(disable : 4996)
- 375 名前:デフォルトの名無しさん [2008/08/19(火) 12:35:56 ]
- >>372
どうもありがとうございます。 MSDNは嫁にしたんですが、気づきませんでした。
- 376 名前:デフォルトの名無しさん [2008/08/19(火) 12:41:29 ]
- 初心者の底辺なんですがおすすめの開発環境はありますか?
それとNetbeansでCをやろうとするとコンパイラが見つからないとエラー吐くんですが、 コンパイラってどこからDLするんでしょうか? 両方ググってはみたものの分かりませんでしたのでお願いします。
- 377 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 12:42:37 ]
- >>6
- 378 名前:デフォルトの名無しさん [2008/08/19(火) 12:56:19 ]
- やはり、>>371でうまくいかない理由がわかりません。
- 379 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:00:12 ]
- >>378
ヘッダの位置変えたらうまくいくんでしょ? コンパイラだって機械だからねえ。 機械的、要するにソースの上から解釈するってことだけでしょ。
- 380 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:06:01 ]
- プロトタイプ宣言の意味とか、プロトタイプ宣言をしない場合はmainより中で使ってる
関数がソースに前に来るとか理解できてるんだろうか?
- 381 名前:デフォルトの名無しさん [2008/08/19(火) 13:12:34 ]
- >>379
そのとおりです。ヘッダをトップに持ってきたらうまくいきました。 >>380 理解できているつもりが、宣言の順番を変えるとうまくいかなくなる説明が解釈できません。
- 382 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:21:26 ]
- >>381
コンパイラの仕組み勉強してこい。
- 383 名前:デフォルトの名無しさん [2008/08/19(火) 13:25:32 ]
- >>382
的確なアドバイス、どうもありがとうございます。 不毛な気がしますが、VCのコンパイラがどのタイミングでCRTライブラリにしてくれるのか、調べてみます。
- 384 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:30:49 ]
- たぶんヘッダを解析した段階でコンパイラがリンクするライブラリを決定してしまってるのに
後でスイッチ置かれても切り替えができなってことかな?
- 385 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:52:31 ]
- _CRT_NON_CONFORMING_SWPRINTFS をgrepしてそのあたり見てみりゃわかる
- 386 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:53:35 ]
- コピペ元間違った
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES こっちな
- 387 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 13:59:33 ]
- あと、、defineはコンパイラ等に直接指示するわけじゃないから
切り替えたいときはincludeの前に置くのは常識なんだけどな。 コンパイラ等に指示出せるのはpragma
- 388 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 14:23:05 ]
- C言語の入門書を理解したレベルで取れそうな資格ってなにかありますか?
- 389 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 14:28:15 ]
- 英検3級
- 390 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 14:33:19 ]
- >>388
「C言語プログラミング能力認定試験」という、クソの役にも立たない資格があるぞ。 3級とか、C言語をほとんど知らなくても取れる。2級はプログラムが組めなくても取れる。 が、入門レベルがわかるだけの資格持ってて何の役にたつと思う? やめとけ。
- 391 名前:デフォルトの名無しさん [2008/08/19(火) 15:30:31 ]
- >>387
なるほど。みなさん、よくわかりました。 おそらく、 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESがデフォルトでゼロになっていて、その値をマクロの引数にとって何かを展開しているのでだめなんでしょうね。 先手を取って1で定義してあげればよい、と。 #undefの使い方の間違えの典型であることがわかりました。 以上踏まえて、既に定義されているマクロを再定義する場合は#undefを使わないで、そのマクロが定義されている#includeの前におけばよいってことですかね。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 15:50:55 ]
- >>388
そこから頑張って2種とか取れば良い。 ていうか、会社に理解してもらえない資格は時間の無駄、金の無駄。 CG検定、シスアドとか取ったけど糞の役にもたたねぇ。
- 393 名前:ym [2008/08/19(火) 16:06:37 ]
- #include <stdio.h>
#include <ctype.h> #define RET_OK 0 #define RET_NG -1 int N60901D01(const char *psChkString { int i; for(i = 0;psChkString[i]!='\0';i++){ if(isupper(psChkString[i])!=0){ return RET_OK; } else{ return RET_NG; } } return RET_OK; } int main(void) { char str[256]; int chk; gets(str); chk = N60901D01(str); printf("\n戻り値は%dです\n",chk); } アルファベットをチェックするプログラムなんですけど、 コンパイルをしたら1文字分しかチェックされませんでした。 どこが間違っているか教えてください。 お願いします。
- 394 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:09:22 ]
- >>393
>if(isupper(psChkString[i])!=0){ の中で必ず一回目でreturnしてる。
- 395 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:11:53 ]
- >>393
for文の中で1文字目チェックした後、真でも偽でもreturnしてるだろう。 そこは最後まで回さないと。最後がRET_OKってことは、if文のRET_OKの行を消せばいいような気がする。
- 396 名前:ym [2008/08/19(火) 16:11:55 ]
- 必ず1回目でreturnしないためにはどうしたらいいですか?
- 397 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:16:59 ]
- >>396
>>395の言うように、 if(isupper(psChkString[i])!=0){ の下の return RET_OK; を消してみ。
- 398 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:17:12 ]
- return文を消せばいいと思うよ
- 399 名前:ym [2008/08/19(火) 16:26:09 ]
- if文のreturn RET_OKを消したらコンパイル成功しました。
ありがとうございました。
- 400 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:37:48 ]
- え、コンパイル失敗してたの?そういう話?
- 401 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 16:43:41 ]
- >>400
3つめのreturn文にいくことはありませんエラーか。
- 402 名前:デフォルトの名無しさん [2008/08/19(火) 17:43:19 ]
- 処理開始から処理終了まで何秒経過したかを調べる方法を探しているのですが、
#include <stdio.h> #import <time.h> #include <unistd.h> int main (int argc, const char * argv[]) { clock_t start, end; start = clock(); printf("start:%ld¥n",start); sleep(1); end = clock(); printf("end:%ld¥n",end); printf("CLOCKS_PER_SEC:%ld¥n",CLOCKS_PER_SEC); printf("%ld秒経過しました。¥n", (end - start) / CLOCKS_PER_SEC); return 0; } これを実行すると start:6464 end:6580 CLOCKS_PER_SEC:1000000 0秒経過しました。 こんな結果が帰ってきました。 CLOCKS_PER_SECは1秒あたりのクロック数では無いのでしょうか。
- 403 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 17:46:26 ]
- 整数型で出力しちゃあ駄目だろ
- 404 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 17:49:15 ]
- printf("%f秒経過しました。\n", (float)(end - start) / CLOCKS_PER_SEC);
- 405 名前:デフォルトの名無しさん [2008/08/19(火) 17:52:29 ]
- >>404
ありがとうございます。 start:6894 end:7011 CLOCKS_PER_SEC:1000000 0.000117秒経過しました。 こうなりました。sleep(1)が0.00017秒?なわけ無いんだが… CLOCKS_PER_SECはあてにならないってことなのかな
- 406 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 17:55:17 ]
- TimeGetTimeか QueryPerformanceCounter使えよ
1秒単位とか精度が悪すぎる(この場合はな)
- 407 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 17:55:40 ]
- int a[4];
int b[4]; int c[4]; : : といった感じに、int型配列が大量に存在している場合に、配列内の数字でソートしたいのですが、 int型配列の数字の大小比較がうまくできません。どなたかご教授お願いします 単純に int(a[0] > b[0]){ってやっていくと死ねる・・・orz
- 408 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:00:09 ]
- qsort
- 409 名前:デフォルトの名無しさん [2008/08/19(火) 18:01:15 ]
- >TimeGetTimeか QueryPerformanceCounter
Winの独自実装ですか… 残念ながらWindowsでは無いです
- 410 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:04:02 ]
- それだけだとほとんど0になるはずだよね。
どんな環境でやってるの?
- 411 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:06:11 ]
- sleepかけてる間クロックとまってんじゃないの
- 412 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:07:19 ]
- sleepで0.00017秒も食ってるから、おかしいと思ってるんじゃないの?
- 413 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:07:50 ]
- >>411
だろーね こういうやり方してもテストにならないってこった
- 414 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:08:41 ]
- >>412
printf挟んどいてそれはないだろ
- 415 名前:402 mailto:sage [2008/08/19(火) 18:11:16 ]
- >>410
gcc 4.0.1 Mac OS 10.5.4 Intel Core Duo 2.4GHz 2GB 667MHz DDR2 SDRAM です。
- 416 名前:402 mailto:sage [2008/08/19(火) 18:13:05 ]
- >>411,413
sleepするとクロック止まるんですか…、ありがとうございます。
- 417 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:20:39 ]
- >>407
何がしたいのかよくわからないが、たぶん配列を大量に作るのがもうおかしいんだろう。 ソートしたいもの全部を一つの配列に入れましょう。
- 418 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:25:55 ]
- >>407
はもうちょっとくやしく
- 419 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:32:50 ]
- >>418
int a[4] ; a[0] =1 a[1]=2 a[2]= 3 a[3]= 4 int b[4] ; b[0] =2 b[1]=2 b[2]= 3 b[3]= 4 として、a自体を1234、bを2234と考えて、大小比較を行いたいわけなんです この場合はb>aみたいな感じで・・・
- 420 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:34:33 ]
- memcmpとかでいいのとちがうん?
配列で連続してればcharで見てやって
- 421 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:38:18 ]
- >>419
if ((a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]) < (b[0] * 1000 + b[1] * 100 + b[2] * 10 + b[3])) { // bが大きい } else { // aが大きい } とかじゃ駄目なの?
|

|