switch文のcaseの使い方について

解決


toshi  2010-10-26 09:03:10  No: 71998  IP: [192.*.*.*]

質問させていただきます。以下にソースコードを書きますが、その中の条件分岐のcaseのところを整数型定数でなく文字で判別できるようにしたいのです。
今回の場合だと、Eが引数として与えられたらEドライブに、FならFドライブにといった具合にしたいのですがどうしたら良いでしょうか?

switch(atoi(ppcArgv[1])){
case 1:
  MoveFileToDir(newname, TEXT("E:\\"));
  DeleteFile(newname);
  DeleteFile(oldname);
  break;
case 2:
  MoveFileToDir(newname, TEXT("F:\\"));
  DeleteFile(newname);
  DeleteFile(oldname);
  break;
case 3:
  MoveFileToDir(newname, TEXT("G:\\"));
  DeleteFile(newname);
  DeleteFile(oldname);
  break;
default:
  DeleteFile(newname);
  DeleteFile(oldname);
  }

編集 削除
!  2010-10-26 09:46:44  No: 71999  IP: [192.*.*.*]

switch(ppcArgv[1] -'A' + 1) {



}

では駄目?

ってか、入力値は大文字限定なのかな?
小文字も入力されて来る可能性があるならば、それらの対処も必要だよ。

編集 削除
maru  2010-10-26 10:16:38  No: 72000  IP: [192.*.*.*]

> その中の条件分岐のcaseのところを整数型定数でなく文字で判別できるようにしたいのです。

文字定数なら何の問題なくそのまま可能です。

char c;
switch (c)
{
  case 'A':
  case 'a':
    ...
    break;
  case 'B':
  case 'b':
    ...
    break;
  ...
}

これが文字列で、となるとそうもいきませんが。

編集 削除
toshi  2010-10-26 10:47:26  No: 72001  IP: [192.*.*.*]

皆さん回答ありがとうございます。
今回作成するプログラムではコマンドプロンプトなどで第一引数にA〜D、第二引数にE〜Fを与え、それぞれ与えられた引数の文字と一致するドライブを選択するものにしたいと思っています。
言い訳をしたくはないのですが今まで条件分岐を扱ったことがないので分かりません。
一度試してみて結果が出たらもう一度書き込みます。

編集 削除
tetrapod  2010-10-26 11:29:38  No: 72002  IP: [192.*.*.*]

っていうか switch/case なんぞまったくもって要らないと思うんだけど。

sprintf で十分 (TCHAR を使うのであれば _stprintf)

編集 削除
toshi  2010-10-26 11:40:49  No: 72003  IP: [192.*.*.*]

完成しました!!

大変ためになるアドバイスありがとうございました。

編集 削除
maru  2010-10-26 11:42:49  No: 72004  IP: [192.*.*.*]

> っていうか switch/case なんぞまったくもって要らないと思うんだけど。

ですね。条件分岐する必要性が感じられません。
> case 1:
> MoveFileToDir(newname, TEXT("E:\\"));
> case 2:
> MoveFileToDir(newname, TEXT("F:\\"));
この辺りのコードに違和感を感じてはいたんですけど。

まぁ、質問のタイトルが「switch文のcaseの使い方について」ということで...

編集 削除