C++/CLIをつつく5ー制御構造。ズバッと判定
もしもあの時に戻れたら、あのケースにはこうしよう・・・
こんピヨ。登場の仕方を変えてみたインドリだよ。今回は制御構造を一緒に学ぼう。
冒頭に書いたけどもプログラムも判断が必要な時があるんだ。 だからC++/CLIにもif文とswitch文が存在するんだ。 じゃあさっそくプログラムを見てみよう。
#include "stdafx.h"
using namespace System;
int main(array ^args)
{
for( int i = 0; i < 10; i++ ) {
if ( ( i % 2) == 0 )
{
Console::WriteLine( "{0}は偶数です。", i );
} else {
Console::WriteLine( "{0}は奇数です。", i );
}
}
return 0;
}
どう?見ての通りif文は何かを判定して、その結果で実行するプログラムを変える文なんだ。 単純だけどプログラムに必要不可欠な要素だからしっかりマスターしよう。
次はswitch文を見てみよう。
#include "stdafx.h"
using namespace System;
int main(array ^args)
{
//なんてこったい。コンパイルエラーだ!
/*Console::WriteLine(
"yesかnoを入力してから、Enterキーを押してください。");
String^ str = Console::ReadLine();
switch ( str ) {
case "yes":
Console::WriteLine( "Yes Yes Yes。" );
break;
case "no":
Console::WriteLine( "それは残念。" );
break;
default:
Console::WriteLine( "yesかnoって言ったのに・・・");
break;
}*/
Console::WriteLine(
"yesの場合0、noの場合1を入力してから、Enterキーを押してください。");
Int32 str = Convert::ToInt32(Console::ReadLine());
switch ( str ) {
case 0:
Console::WriteLine( "Yes Yes Yes。" );
break;
case 1:
Console::WriteLine( "それは残念。" );
break;
default:
Console::WriteLine( "yesかnoって言ったのに・・・");
break;
}
return 0;
}
この文は指定した変数の値を判定する文なんだ。 でもひとつ注意が必要だよ。String^はC++のプリミティブ型(組み込み型)じゃあないからC#とは違って、 String^はswitch文で使用できないピヨ。 試しにコメントアウトされている部分を解除してごらん。 コンパイラがエラーといってくるピヨ。 switch文はif文でも同じことが出来るからどちらを使うかは好みの問題となるよ。
今回はあまり面白みがないので面白いことをひとつ教えるよ。
実はこのswitch文caseの部分順番は制限されていないし、C#とは違ってbreakは必須ではないんだ。だからこんなことも出来る。
#include "stdafx.h"
using namespace System;
int main(array ^args)
{
Console::WriteLine(
"yesの場合0、noの場合1を入力してから、Enterキーを押してください。");
Int32 str = Convert::ToInt32(Console::ReadLine());
switch ( str ) {
default:
Console::WriteLine( "yesかnoって言ったのに・・・");
case 0:
Console::WriteLine( "Yes Yes Yes。" );
case 1:
Console::WriteLine( "それは残念。" );
break;
}
return 0;
}
実行してみて、ちゃんと実行できるはずだよ。なんか面白いよね。
でも汚いから実際の開発で書いたら嫌われるぞ。注意してね。
特にbreakは要注意ピョ。
わかりにくいバグを生んじゃうぞ。だからC#では禁止されているんだ。
ちょっと短いけど今回はこれでおしまい。