選擇結構︰ switch 語句

前頁 目錄 下頁

多量判定

除了嵌套 if-else 語句外,我們還可以根據一個順序數據類型算式的值,使用 switch 語句作出多重選擇。

C++ 控制結構 等同的 Turbo Pascal 控制結構
switch (<順序數據類型算式>) {
case
<值1>:
  <情況1的語句1>;
  <情況1的語句2>;
    ...
  <情況1的語句n>;
  break;
case
<值2>:
  <情況2的語句1>;
  <情況2的語句2>;
    ...
  <情況2的語句n>;
  break;
  ...
default:
  <預設情況的語句1>;
  <預設情況的語句2>;
    ...
  <預設情況的語句n>;
}
case <順序數據類型算式> of
  <值1>: begin
    <情況1的語句1>;
    <情況1的語句2>;
      ...
    <情況1的語句n>
  end;
  <值2>: begin
    <情況2的語句1>;
    <情況2的語句2>;
      ...
    <情況2的語句n>
  end;
  ...
  else (* 只在 Turbo Pascal 支援 *)
    <預設情況的語句1>;
    <預設情況的語句2>;
      ...
    <預設情況的語句n>
end

在這個控制結構中,case <值>: (C++ 中)及 <值>: (Pascal 中)是情況標記<順序類型結構算式> 會先被計算,那些對應回傳值的語句會被執行,而其他的會被忽略。當回傳值並沒有在任何一個情況出現時,預設情況(C++ 的 default 或 Pascal 的 else)的語句會被執行。請看看以下程序

程序十四︰使用 switch 語句
C++ 版本 Pascal 版本
#include <iostream.h>
main()
{
  char grade;
  cout << "Grade: ";
  cin >> grade;

  switch (grade) {
  case 'A': case 'B':
    cout << "Good!" << endl;
    break;
  case 'C':
    cout << "Average." << endl;
    break;
  case 'D':
    cout << "Fair." << endl;
    break;
  case 'F':
    cout << "Poor." << endl;
    break;
  default:
    cout << "Invalid grade!" << endl;
  }


  return 0;
}
program prog_14(input, output);
var grade: char;

begin
  write('Grade: ');
  readln(grade);

  case grade of
  'A', 'B':
    writeln('Good!');

  'C':
    writeln('Average.');

  'D':
    writeln('Fair.');

  'F':
    writeln('Poor.');

  else
    writeln('Invalid grade!')
  end

end.
輸出範例一(紅色的文字由使用者輸入)︰
Grade: C
Average.
輸出範例二(紅色的文字由使用者輸入)︰
Grade: X
Invalid grade!

在 C++ 中,如果 <順序數據類型算式> 回傳的值和情況標記的任何一個 <值> 吻合,那麼由該標記到 break 語句之間的所有語句皆會執行。因此你會發現在下一個情況標記之前都有一個 break 語句。如果沒有了這個 break 語句的話,你可能能會得到非預期的結果。參與以下程序作為例子,它和上面的程序差不多相同,分別只是下面的程序漏了一個 break 語句。

程序十五︰使用 switch 語句時漏了一句 break 語句
#include <iostream.h>

main()
{
  char grade;
  cout << "Grade: ";
  cin >> grade;

  switch (grade) {
  case 'A': case 'B':
    cout << "Good!" << endl;
    break;
  case 'C':
    cout << "Average." << endl;
    // 漏了一個 break 語句。
  case 'D':
    cout << "Fair." << endl;
    break;
  case 'F':
    cout << "Poor." << endl;
    break;
  default:
    cout << "Invalid grade!" << endl;
  }


  return 0;
}
輸出範例(紅色的文字由使用者輸入)︰
Grade: C
Average.
Fair.

從上面的輸出範例,可以見到當等級是「C」的時候,「Average.」及「Fair.」皆在畫面上出現。這是因為顯示「Average.」的語句之後沒有 break 語句,所以下一句(即顯示「Fair.」那一句)都被執行。

前頁 目錄 下頁