トップページ⇒tech
1001コメント326KB

【初心者歓迎】C/C++室 Ver.34【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/01/17(水) 22:16:00
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1164376287/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0232デフォルトの名無しさん2007/01/26(金) 15:49:12
>>230
キー入力する部分の inp() が君の使っているコンパイラには無い。
他の1文字入力を待つ標準関数を探そう。

# 最後に押されたASCIIコードが port 60h のリードで得られるって OS&PC は何なんだろ?
0233デフォルトの名無しさん2007/01/26(金) 16:00:26
VS2005でMFCで更にダイアログでプロジェクトを新規作成するとF1キーを押すと
HELPが見つかりませんとでます。MFCでもダイアログ以外を選択するとでません。
またMFCでなくWindowsフォームアプリケーションにしても出ません。
これは仕様なのでしょうかね?HELPを作成せずにメッセージを出さなくする方法
はありますか?こちらのスレの方が適切だと後で思ったのでこちらにも書いてみ
ました。マルチポストすみません。
0234デフォルトの名無しさん2007/01/26(金) 16:01:39
私のOSはXPでPCはAT互換機です。
簡単なゲーム作成で、藤川ソフトウェア工房で
「C言語のget系の標準関数を使うのは問題外です。2つ以上のキーを同時に認識できないからです。」
 「キーボードのデータはI/Oポートのアドレス60hから取得できます。
 C言語でI/Oポートのアドレス60hを読むには、conio.hをインクルードしておいて」
ハードウェア割り込みというこでできると書いてありましたが環境が違うので、無理っぽいですが
もう少し調べてみます。有り難うございました。
02352272007/01/26(金) 16:05:43
>>231
>元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。
その通りフックです。そうなんですか〜、既存のアプリがランタイム要るので自分で作ろうとしたのにorz
どうもありがとうございました。
0236デフォルトの名無しさん2007/01/26(金) 16:20:41
>>234
サイト見つけた。
ttp://www14.big.or.jp/~amiami/fsk/old/stg/stg2.html
AT互換機で DOS/Win9x限定(ポート直たたきするから)
+ コンパイラはWatcomC という縛りの元で Webの内容を構成してるぞ。

環境あわすか、他のページを参考にしたほうが良いんじゃねーかな?
0237デフォルトの名無しさん2007/01/26(金) 16:33:20
>>236
そうでした。コンパイラが違うから使えない・・・
あらためて、互換性の高い壁を感じました。(>_<)
コンパイラ変更も含め検討します。
どうもでした!
0238デフォルトの名無しさん2007/01/26(金) 16:35:01
>>237
Win32API使えばいいじゃん
0239デフォルトの名無しさん2007/01/26(金) 16:52:46
>>238
まじっすか!get系を使っていて同時押しできなくて、どうしようかと悩んでいました。
(真剣にコンパイラ変更を考えていた)コマンドプロンプト用のゲーム。
色や位置設定などでコンソールAPIを使っていました!Win32APIもためしてみます!
有り難うございます。m(_ _)m
0240デフォルトの名無しさん2007/01/26(金) 17:01:49
>>239
コンパイラ変更だけじゃなくて、動作OSも変えないと意味ないぞ。 (XP じゃ port 60 のリードできない)
素直に WinAPIを使う=Windows のプログラミングするべし
0241デフォルトの名無しさん2007/01/26(金) 17:06:21
>>234
> 私のOSはXP

お前、XP で動いてるんか。
0242デフォルトの名無しさん2007/01/26(金) 17:09:15
頭は486並だけどな
02432312007/01/26(金) 17:30:55
>>235
ランタイムを使わないDLLを作るのはどうだろう?
そこから改めてランタイムの不要なアプリを自作すると。
02442272007/01/26(金) 18:35:36
>>243
既存のアプリが実行ファイルとランタイムの構成で、
それを1つにまとめたくて同じ機能の物はランタイム不要で作れたんですけど、
フックした方がもっと便利なものが作れると思ったら、
DLLとEXEの複数ファイルが必要だったって状態です。
0245デフォルトの名無しさん2007/01/27(土) 15:28:33
>>244
何故「一つのファイル」に拘るの?
0246デフォルトの名無しさん2007/01/27(土) 15:30:35
なんか結局dynamicにリンクするハメになるんじゃないかと
0247デフォルトの名無しさん2007/01/27(土) 16:34:36
先生からもらったプログラムに
int size = 128;
int n = size >> 1;
という記述があったんですが">>"はどういう意味なんですか?
0248デフォルトの名無しさん2007/01/27(土) 16:38:56
先生に訊けよ
0249デフォルトの名無しさん2007/01/27(土) 16:39:26
ビットシフト
0250デフォルトの名無しさん2007/01/27(土) 18:13:52
>>247
先生に
「どうして”int size = 64;”にしなかったのですか?」
って聞いたら教えてあげる
0251デフォルトの名無しさん2007/01/27(土) 18:18:34
ついでに、unsignedでない整数型に右シフトを使うのは
いかがなものでしょうか先生、
ぐらい言うと良い
0252デフォルトの名無しさん2007/01/27(土) 18:19:55
さらに「先生はプログラム向いてないんじゃないですか?」くらい言えば完璧
0253デフォルトの名無しさん2007/01/27(土) 19:09:13
おまえら血も涙もねぇなw
0254デフォルトの名無しさん2007/01/27(土) 19:10:19
ニフラムスレ思い出したwwww
0255デフォルトの名無しさん2007/01/27(土) 19:45:08
「signedでビットシフトっすかw」
0256デフォルトの名無しさん2007/01/27(土) 23:09:45
新これならわかるC++挫折しないプログラミング入門というのを見ながら

#include <iostream>

int main()

{

std::cout << "Hello!" << std::endl;

}

ていうのを書いてあるとおりにしたらエラーなんですけど何が違うのでしょうか?

ちなみにエラー文はこちらです。

エラー E2209 hello.cpp 1:インクルードファイル'iostream'をオープンできない
エラー E2290 hello.cpp 7:型限定子'std'がクラス名または名前空間ではない(関数
 main())
エラー E2379 hello.cpp 7:ステートメントにセミコロン(;)がない(関数 main())
0257デフォルトの名無しさん2007/01/27(土) 23:13:33
>>256
環境書けボケ
0258デフォルトの名無しさん2007/01/27(土) 23:15:06
>>256
BCCならbcc32.cfgとilink32.cfgの中身晒せ
それとBCC32.EXEのあるフルパスと
0259デフォルトの名無しさん2007/01/27(土) 23:31:44
環境とはなんですか?
中身の見方とは?
素人なのですいません(汗)
0260デフォルトの名無しさん2007/01/27(土) 23:37:39
プログラミングやる以前の問題だな
0261デフォルトの名無しさん2007/01/27(土) 23:37:44
>>259
OSと使っているコンパイラとコンパイラのある場所のフルパス書け
それが環境だ
0262デフォルトの名無しさん2007/01/27(土) 23:38:26
>>259
PC初心者板行け
0263デフォルトの名無しさん2007/01/27(土) 23:40:34
だめだこりゃ

┐(´ー`)┌
0264デフォルトの名無しさん2007/01/27(土) 23:41:46
動作環境
Intel Pentium CPUおよび互換性のあるCPU(推奨Pentium/166MHz以上)
Windows 2000、Windows 95,98,NT 4.0(SP3以降)
32MB以上のメモリ(推奨64MB以上)
50MB以上のハードディスク

以上です。
0265デフォルトの名無しさん2007/01/27(土) 23:43:50
↑
間違い
0266デフォルトの名無しさん2007/01/27(土) 23:48:50
なんでbccはデフォでインクルードパスとか通すようにしなかったんだろ
この板でこれ関連の質問が何度あったことか・・・
0267デフォルトの名無しさん2007/01/27(土) 23:57:51
>>266
プログラミングする人ならそれくらい出来てあたりまえだろうと
ボーランドの中の人が思ってたんだろう。
0268デフォルトの名無しさん2007/01/28(日) 01:01:55
程よい素人フィルタになってていいんじゃないかと思う
0269デフォルトの名無しさん2007/01/28(日) 02:15:53
そういえば iostream.h って何時から絶版になったんだっけ?
0270デフォルトの名無しさん2007/01/28(日) 06:25:20
>>269
下位互換のために残っているんじゃないかな?
0271デフォルトの名無しさん2007/01/28(日) 10:03:24
>>269
VC++2003では既に無くなってる。
0272デフォルトの名無しさん2007/01/28(日) 10:23:45
>>264
それはそのソフトが要求する性能。
こっちが知りたいのは、とりあえずお前が実際に使っているOSとそのバージョン、そして使っているコンパイラ。

>>269
ANSI/ISOの規格ではC++98の当初から削除されていると思う。
0273デフォルトの名無しさん2007/01/28(日) 12:02:42
stringの関数c_str()と、data()の違いが分かりません。
↓こんなことしてみたんですけど、なにがなんだか。
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
string str = "ABC";
cout << str.c_str() << "\n";
cout << str.data() << "\n";

for ( int i = 0 ; (str.c_str())[i] != '\0' ; i++ )
{
cout << (str.c_str())[i] << "\n";
}

for ( int i = 0 ; (str.data())[i] != '\0' ; i++ )
{
cout << (str.data())[i] << "\n";
}
}
0274デフォルトの名無しさん2007/01/28(日) 12:14:34
>>273
ゼロ終端が保証されてるかどうかの違い。
0275デフォルトの名無しさん2007/01/28(日) 12:15:55
c_str() は末尾に '\0' をつけてくれる
data() はつけてくれる保証がない
0276デフォルトの名無しさん2007/01/28(日) 12:21:13
>>273
環境も書くべし

c_str()の場合 A B C \0
data()の場合 A B C
0277デフォルトの名無しさん2007/01/28(日) 12:28:16
よろしくお願いします。
ttp://www11.ocn.ne.jp/~ikalu/cplus/5001.html
↑このページの
// 「string」と「vector」を使用して、実行ファイルにドラッグアンドドロップ
//  されたファイルのパスを分割する
//
//  : stringクラスに対して << をオーバーロードするバージョン(サイズ: 56.0 KB)

を使いたいんですけど、コンパイルすると
path.push_back(string(&s[start], s.end())); の所で
error C2665: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string' : 13 オーバーロードのどれも、すべての引数の型を変換できませんでした
になります。どう直せばコンパイルが通るでしょうか?
環境はVC2005,WinXPです。
0278デフォルトの名無しさん2007/01/28(日) 12:30:40
>>274-276
ありがとうございます。
'\0'を入れるかどうかは、環境によるんですね。
結果のみの出力でみにくいですが、
↓のようになりました。(この環境は、dataでも'\0'が入っているということですよね?)
ABC
ABC
A
B
C
A
B
C


>環境も書くべし
はい。気をつけます。Visual Studio C++ 2005です。
0279デフォルトの名無しさん2007/01/28(日) 12:39:44
>>278
たまたま使ってない部分に\0が入っていたか、VC++がそういう実装をしてるかのどっちか。
0280デフォルトの名無しさん2007/01/28(日) 12:45:49
>>277 path.push_back(string(s.begin() + start, s.end()));
0281デフォルトの名無しさん2007/01/28(日) 13:00:35
"ABC" 自体が 'A' 'B' 'C' '\0' なんだから、
string str = "ABC" の場合だと '\0' は環境に関係なく入るんじゃないの?
0282デフォルトの名無しさん2007/01/28(日) 13:05:28
いいえ。
02832772007/01/28(日) 13:10:48
>>280
ありがとうございます。
結果もバッチリです。
0284デフォルトの名無しさん2007/01/28(日) 13:34:42
dataとc_strについてですが、
『さて,このにstr()というメンバ関数とほとんど同じ動作をする関数で,
data()というメンバンバ関数があります.このdata()も,コールす
ると文字列へのポインタが返ってきます.そういう点ではc_str()とまっ
たく同じ動作なのです.ではどこが違うのかというと,文字列が設定されていな
いときの挙動です. c_str()は,インスタンスに文字列が設定されてい
ないときには,内部であらかじめ用意されている空文字列(つまり.先頭が冒の
文字列)へのポインタが返ります.それに対してdataOメンバ関数は,NU
LT.ポインタが返るのです.この違いがわかりますか?文穿刺が設定されてい
ないstrir咀クラスインスタンスの内存をp1血Oで出力しようとした際に
,c_str()でポインタを取得すると,空文字列へのポインタが返るので,
画面には単なる改行が出力されます.それに対して,data()でポインタを
取得しようとすると,NULLポインタが返るので,puts()で,それを出
力しようとするとランタイムエラーになります.』
らしいです。

そこで、
// string str = "ABC";
string str1;
string str2;
puts(str1.c_str());
puts(str2.data());
としました。

しかし、いずれも改行が出力されます。
この2種類のメンバ関数の違いを確認する場合どうしたらいいでしょうか?
0285デフォルトの名無しさん2007/01/28(日) 13:40:58
>>284
> data()というメンバンバ関数

ワロタ
0286デフォルトの名無しさん2007/01/28(日) 13:42:23
NULT.ポインタが返るのです.この違いがわかりますか?
0287デフォルトの名無しさん2007/01/28(日) 13:43:05
>>284
printf("%p\n", str1.c_str());
printf("%p\n", str2.data());
0288デフォルトの名無しさん2007/01/28(日) 13:44:09
規格書嫁
0289デフォルトの名無しさん2007/01/28(日) 13:51:02
>>284
その奇怪な引用はどこから来たんだ?
0290デフォルトの名無しさん2007/01/28(日) 13:56:08
data() はヌルにならないよ。規格の 21.3.6 に書いてある。
0291デフォルトの名無しさん2007/01/28(日) 14:58:26
規格上違いがあっても実装上同じにしている処理系は多いのじゃないかな。
あえて違わせておく理由が考えにくい。
0292デフォルトの名無しさん2007/01/28(日) 15:08:37
してはいけない と しなくて良い は全然違うと思うけど。
規格にどう書いているかで解決。

規格書持ってるひとよろ。
02932842007/01/28(日) 15:36:14
>>284
憂鬱なプログラマのためのオブジェクト指向開発講座のp330?
0294デフォルトの名無しさん2007/01/28(日) 15:42:05
>>274の通りだと思ったけど違うの?
0295>>2842007/01/28(日) 15:51:18
>>284憂鬱なプログラマのためのオブジェクト指向開発講座のp330だつx
0296デフォルトの名無しさん2007/01/28(日) 15:54:07
精度の悪い「画像→テキスト」変換でもかけたような壊れ方だな。
0297デフォルトの名無しさん2007/01/28(日) 16:41:03
>>284
printf("%.*s", str.size(), str.data());
とすれば、ナル文字で終端していなくても問題が出ない。
0298デフォルトの名無しさん2007/01/28(日) 16:54:06
290の言うとおりだな。
>21.3.6 basic_string string operations
>const charT* data() const;
>3 Returns: (略) If size() is zero, the member returns a nonnull pointer
>that is copyable and can have zero added to it.
0299デフォルトの名無しさん2007/01/28(日) 17:57:11
逐次計算をCのプログラムでやれそうなので書いていたのですが、手詰まりになったので質問させてください。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip

水流と勾配から水深を逐次計算法によって出力するプログラムを作っています。
川は限界水深の地点を境に上流側が上流で動水勾配は1/1000、下流は射流で動水勾配は1/250です
流量2210 川幅200 粗度係数0.02 限界水深2.3175として、適当な値をh2以下に当てはめて計算するのですが

常流では適当な値を入れても悪くても20~30回のループで計算が終了するのですが
射流では1000回超えてもループが止まらない場合が多々あります
計算式としては常流analise.cの
hi = D1->H + D1->Z + term1(D1,D2) + term2(D1,D2,dx) - D2->Z;
ここの部分が
hi = D1->H + D1->Z + term1(D1,D2) - term2(D1,D2,dx) - D2->Z;
に変わるだけなのですが、どう修正すればいいでしょうか?
0300デフォルトの名無しさん2007/01/28(日) 18:07:53
>>299
ロジックを追ってないのでぱっと見で気付いた点のみ。
・2乗にpow()を使うのは流石に勿体無い。乗算にした方がよさそう。
・analise(なんてスペリングだ)で再帰しているが、ループで書き直すべき。
#もしかしたら再帰でスタックを消費している所為で巧く動かないのかも知れない。
・当然、ループ回数をグローバルで持つ必要はない。
#グローバル変数は諸悪の根源と知るべし。
・後の編集ミスを防止するためにも、OneLinerでないならブロック化したほうがいい。
#analise()内のelse節はその典型。
03012992007/01/28(日) 18:09:39
すみません上流側が常流で、でした。
各analise.cも古いものだったので上げなおしました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip

よろしくお願いします。
0302デフォルトの名無しさん2007/01/28(日) 18:11:23
>>301
リロードして確認してから書き込め。
03032992007/01/28(日) 18:12:58
>>300
早速ありがとうございます。
>>302
すみません、一度頭冷やして修正してみます。
03043002007/01/28(日) 18:16:06
も一つおまけ。
・tempに絶対値を入れるなら、fabs()を使え。
#>double temp;/*誤差を格納*/
#こんなコメントつけるくらいならdouble gosa;とでもした方がよっぽど理解しやすい。
0305デフォルトの名無しさん2007/01/28(日) 18:40:30
>>292
X3014の画像PDFなら誰でもタダで見れるぞ。
0306デフォルトの名無しさん2007/01/28(日) 19:04:26
>>292
英語版の最新ドラフトもタダで見れるぞ。
03072992007/01/28(日) 20:17:08
>>304
指摘してもらった部分を修正しました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3537.c

これで下流方向10mの値で
流量2210 川幅200 粗度係数0.02 h1の高さ 2.3175 h1の高さ 0
h2の水深 (任意の予想値) h2の高さ -0.04 距離の差 10
とするとループが止まらなくなるか限界水深より大きい値になってしまいます

hiを求める式の第三項を+にしただけの常流の場合ではちゃんと出るのですが…
03083002007/01/28(日) 20:36:11
>>307
そう言われても式の意味も判らなければ何を求めようとしているのかも判らないから無理w
#動水勾配なんて言葉初めて見たし、限界水深ってのがどういう意味を持つのやら。
##あ、いきなり解説しないでね。どうせ理解する気も暇もないから。
0309デフォルトの名無しさん2007/01/28(日) 20:37:41
宿題スレ向きだな
0310デフォルトの名無しさん2007/01/28(日) 20:52:16
templateでやると面白い課題かもっ!
と思ったが>>308と同じ印象を受けたので2分と持たずに挫折した
03112992007/01/28(日) 20:55:34
input.cにも最初の頃の名残で無駄な変数の定義が…
>>308-310
分かりました、そちらに移行させて頂きます。
ご協力ありがとうございました。
0312デフォルトの名無しさん2007/01/28(日) 20:57:09
すみません「ラッパー」について教えてください
良く理解してないんで確認させてください

VCとBCCはWIN APIのラッパーがあるって記述をWikiで見ました
MinGWもGCC用のラッパーであると思っていいんでしょうか?
0313デフォルトの名無しさん2007/01/28(日) 23:18:26
ラッパーというのは物体があったとしてそれを包み込むものの事。
VCにはMFCがあり、BCCにはVCLがあった。
それはWin32APIをラップして利用者にとって都合のよい方向へ持っていったということ。

MINGWはGCCのラッパーではなくてランタイムライブラリだと思う。
MINGW自体はたしかLinuxの概念をもったなんだっけ。。。
まーそんな感じだったはずなので、ラッパーというよりはエミュレータとかそっちだと思う。

Windows開発にはMinGWでもWin32Apiを使うはずだとおもうけど。
0314デフォルトの名無しさん2007/01/28(日) 23:20:34
>>308
> 気も暇も
こういうときはね、頭っていっとくのが一番かっこいいんだよw
0315デフォルトの名無しさん2007/01/28(日) 23:22:27
>>308
土木・建築は土質力学・構造力学・水理が重要な三本柱ですよ。
0316デフォルトの名無しさん2007/01/29(月) 00:23:39
恥ずかしい>>308がいるスレはここですか?
0317デフォルトの名無しさん2007/01/29(月) 00:34:44
無学で無知で学習意欲が低めですいません
0318デフォルトの名無しさん2007/01/29(月) 02:23:13
sndPlaySoundの戻り値はどのように利用するのでしょうか?
FALSEだった場合の処理を後に続けたいです。
環境:WindowsXP・VC2005
よろしくお願いします。
03193182007/01/29(月) 03:09:28
上手く行きましたがまた新たな問題がorz
眠いので今日は寝ます、おやすみなさい。
03203002007/01/29(月) 06:36:52
>>314
大丈夫、私の専門では存分に使ってるから。

>>315
なるほど、業界丸ごと縁がないんで知りませんでしたよ。

>>316
私には、そんな無意味なレスしかできない>316が恥ずかしい。

>>317
自己紹介乙。
0321デフォルトの名無しさん2007/01/29(月) 08:17:12
なんという無意味なレス

308といい、馬鹿だと思われたくてしょうがないようにしか見えないなw
0322デフォルトの名無しさん2007/01/29(月) 09:30:07
for(...){try{...}catch(,,,){...}}とtry{for(...){...}}catch(,,,){...}はどっちが速いのか聞こうと思ったけど
自分で確かめもせずに入に聞くのは良くないと思い以下のコードで実験してみたら
timeBeginPeriod(1);
DWORD t=timeGetTime(),r;
for(int i=0;i<100000000;++i){
try{
if(i<0)throw exception();
}catch(exception e){exit(-1);}
}
r=timeGetTime()-t;
cout<<r<<endl;
t=timeGetTime();
try{
for(int i=0;i<100000000;++i){
if(i<0)throw exception();
}
}catch(exception e){exit(-1);}
r=timeGetTime()-t;
cout<<r<<endl;
timeEndPeriod(1);
結果:
450
270
と出力された。差分180。
でもノイズとしてifの直前にi*=3;i/=3;を入れ、ループ回数を100000000から10000000にしたら
結果:
664
607
となった。差分57。
明らかに差が縮まっていますがこの違いはなんですか?
VC8 最適化なし celeron2.4GHz
0323デフォルトの名無しさん2007/01/29(月) 10:48:53
>>322
tryブロックの前処理/後処理より、乗除演算の方が高コストということ。
0324デフォルトの名無しさん2007/01/29(月) 11:05:42
arigatougozaimasu;
0325デフォルトの名無しさん2007/01/29(月) 11:06:35
>>322
対照実験として、tryなしのループの速度も測るといいと思うよ。
0326デフォルトの名無しさん2007/01/29(月) 11:22:23
timeGetTimeじゃなくて、パフォーマンスカウンタ使った方がいいかもね。
0327デフォルトの名無しさん2007/01/29(月) 11:38:50
Bの方がAよりコードとしては優れているらしいのですが、
どうしてかわかりません。
Aは何がよくないのかどなたか教えてください。

A ----------------------
if( month == FEB ){
if(year%4 == 0){
if( day > 29 )
1egal = FALSE;
} else {
if( day > 28 )
1egal=FALSE;
}
}

B ----------------------

if( month == FEB ){
int nday;

nday = 28;
if(year%4 == 0)
nday = 29;
if(day > nday)
1egal = FALSE;
}
0328デフォルトの名無しさん2007/01/29(月) 11:43:53
・Bはifが少ない。条件分岐のコストは高い。
・1egal = FALSE;の箇所がBは1つしかないから保守が容易。
03293272007/01/29(月) 11:48:16
>>328
わかりました。
(動けばいいと思ってあまりそういうこと考えてことがなかったので)
ありがとうです。

スペルミスでした。
× 1egal
○ legal
0330デフォルトの名無しさん2007/01/29(月) 12:05:27
更にこうすると言う手もある。
・未初期化の変数が放置されない
・ローカル変数を節約できる(かも知れない)
但し、三項演算子を否定する方針があると使えない
尚、if文は(1行野郎でないなら)ブロック化したほうがよい
if (month == FEB) {
if (day > year % 4 == 0 ? 29 : 28) {
legal = FALSE:
}
}
0331デフォルトの名無しさん2007/01/29(月) 12:57:42
if((month==FEB)&&(day>((year%4)==0?29:28))){legal=FALSE;}
ま、こういう事さね。
■ このスレッドは過去ログ倉庫に格納されています