C ++ switch语句,这是如何工作的

时间:2013-01-16 21:32:48

标签: c++ switch-statement

#include <iostream>
#include <sstream>

int main(int argc, char* argv[]) {
if ( argc != 2 ) {
 std::cout << "usage: " << argv[0] << " <n> " << std::endl;
 return 0;
}
std::stringstream strm;
strm << argv[1];
int count = 0;
int number;
strm >> number;
switch ( number ) {
 case 0: ++count; 
 case 1: ++count; 
 case 2: ++count; 
 case 3: ++count; 
 case 4: ++count; 
 }

    std::cout << "count: " << count << std::endl;
    return 0;
 }

我知道这是一个新手问题,但我刚开始使用C ++。我参加了一个游戏设计课程,这是教授在SVN上的第一个例子。当我在编译后运行编程时,

./运行4 (即我给出参数4)我得到一个输出:count:1

./跑3 我得到一个输出:count:2

./运行1 数:4

./运行0 数:5

由于count初始化为0,为什么./run 1给出4或./run 0给出计数5.

我真的很抱歉这个愚蠢的问题,但我要感谢任何解释。

先谢谢 此致

2 个答案:

答案 0 :(得分:10)

使用switch语句,当控件传递到case标签时,代码将继续通过所有其他case标签,直到break或{{1遇到(或其他流控制机制)。这对于统一特定情况的逻辑非常有用,也可用于更复杂的任务。例如,请参阅:a Duff's Device.

答案 1 :(得分:3)

switch语句定义了输入一组代码的位置。

switch ( number ) {
 case 0: ++count; //entrance point with number= 0
 case 1: ++count; //entrance point with number= 1
 case 2: ++count; //entrance point with number= 2
 case 3: ++count; //entrance point with number= 3
 case 4: ++count; //entrance point with number= 4
}

除了到达开关的末端之外,本身没有出口。但是,可以添加“休息”;语句下的任何地方的语句都会导致代码提前退出(或超出范围)。

此外,但稍微偏离主题,关键字“default”应该在case语句中使用。当数字没有定义的大小写时,将调用default关键字。例如,使用上述情况,如果有人将号码6发送到案例。