>if文が違うというのはどこがどう違うのか
については
キチンと回答者の方々のご意見見てますか?
>YuO [E-Mail] 2003/02/06(木) 21:31:04
>(ゥ? 2003/02/06(木) 22:15:14
に回答されている通りです
これをご理解いただけないのであれば
NEG(ねぐ) さんがお示しくださった場所での
内容をしっかり自分の物として学習し身につけてから
再度お越しくださいませ。
...一体世の中ではなにが起こってるんだろ。
こんなんばっかや。
>...一体世の中ではなにが起こってるんだろ。
>こんなんばっかや。
世の中こんなんばっかなんですか...
私は,’このスレ’or'これに大変よく似たスレッド'
だけだと思いたいです...
新しい課題でも出たのかな?
マップさん、それならあってるのではないのですか?
何が違うのかが理解できません
>何が違うのかが理解できません
ということは,あなたは
>if(FileName,*.M,I.*)
が
>もし、ファイルが**MとI.**だったら
を,意味すると思っているわけですね?
そういう解釈なのですが違うのですか?
ごめんなさい・・何かいい例を書いてもらえないでしょうか?
勉強はしてるのですが、なかなか理解できず悩んでいます
本当に申し訳ございません
>そういう解釈なのですが違うのですか?
失礼ながら、この程度のCの知識で
MFCを使うのは無謀と思われます。
やれやれだ、自分の質問の仕方については考えてはくれないのですか?
あなたが何をしようとしていて、何がわからないのかが、あなたの発言からではわからないので
すが?
if 文は括弧内の式を評価して、『それが0以外か、0か』のみを判断します。
if 文自体にワイルドカード展開などという高水準な機能はありません。
自分が判定したいものを分解し、一つ一つ書いていく必要があります。
日本語で言うテニオハのような知識です。理解してください。
あなたは
if( a, 1 )
と書けば、『aが1ならば』と解釈されると思っているかもしれませんが、それはまったくの誤り
です。
『aが1ならば』なら、『aと1を比較し、その結果が真ならば』つまり
if ( a == 1 )
と書く必要があります。
入門書を読むなり。参考書を読むなり。正しく教えてくれない講師を問い詰めるなりして
正しく理解してください。
で、あなたが何を判定指定のしたいのかがよくわからないのですが、
とりあえず、『.』の前後の文字で処理を振り分けたいのだ、と、こちらで勝手に解釈します。
// 後ろから '.' を探す
int dot = Filename.ReverseFind('.');
// 見つからない、一番最後、一番最初の時はどうしようもないからかえる。
if( dot == 0 || dot == -1 || dot >= Filename.GetLength()) return;
// '.' の前と後の文字を取り出す。同時に比較を容易にするために大文字に変換。
int nextOfDot = _toupper( Filename.GetAt( dot+1 ));
int prevOfDot = _toupper( Filename.GetAt( dot-1 ));
// 前が M もしくは後が I なら
if(nextOfDot == 'M' || prevOfDot == 'I' ){
// ReadBinary
}
// そうではなく、前が T なら
else if(prevOfDot == 'T')
{
// ReadText
}
>ごめんなさい・・何かいい例を書いてもらえないでしょうか?
>もし、ファイルが**MとI.**だったら上のファイル読み込み、
>もし、t**というファイルなら下の読み込みに行くようにしたいです
もし x が 1 か 2 だったら XXX を、3 だったら YYY を行いたい
if ( x == 1 || x == 2 ) {
XXX;
} else if ( x == 3 ) {
YYY;
} else {
それ以外
}
失礼
テニオハ → テニヲハ
判定指定のしたい → 判定したい
例
if( (FileName == *.M) || ( FileName == I.*))
みたいな感じ。間違っていても判定式使って書いてくれた方が
まだわかりやすいです。* ってワイルドカードですよね?
int i, j;
CFile* fp = ar.GetFile();
FileName = fp->GetFileName();
if(FileName == *.M || FileName == I.*)
{
if( fp->GetLength() < HEADER_SIZE ) {
return;
}
fp->Seek( HEADER_SIZE, CFile::begin );
unsigned short *y;
y = p;
for ( i=0; i<IMAGEDATA_SIZE; i++, y++)
{
fp->Read(y, sizeof( unsigned short ));
}
}
else if(FileName== t.*)
{
ifstream mystream;
if(FileName==a.*)
{
for( i = 0; i < NX; i++ ){
for( j = 0; j <NY; j++ ){
mystream >> Data[j][i];}}
}
}
これでよろしいのでしょうか?
だめです。PAIさんのリプライを読んでないでしょ。
> (FileName == *.M || FileName == I.*)
質問1.ここで言っている'*'は、DOSで言う、ワイルドカードなのでしょうか?
# '*' means for 0 or 1+ charactors.
質問2.FileName の型は何なんでしょう?
(A) '*'をワイルドカードとして扱いたい場合、かつFileName の型がCString型
である場合は、マッチすることはほとんどないでしょう。
(B) '*'をマッチし得る文字として、かつFileName の型がCString型である場合
は、マッチし得るでしょう。
'*'をワイルドカードとして扱いたい場合、かつ
> (FileName == *.M || FileName == I.*)
と書きたいならば、FileNameの型をCString型から派生するなどして、
==演算子をオーバーライドし、ワイルドカード比較可能なクラスを
自作する必要があります。
# ちなみに、σ(^^)はこのような機能を実装した自作クラスを使用しています。
Windows98/VC++6.0sp5pro/SDK-may2002/ATL3.0/WTL7.0