2
#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 上的第一个示例。当我编译后运行程序时,

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

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

./run 1 计数:4

./run 0 计数:5

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

对于这样一个愚蠢的问题,我真的很抱歉,但我会很感激任何解释。

提前致谢

4

2 回答 2

10

使用switch语句,当控制传递给case标签时,代码将继续通过所有其他case标签,直到遇到breakreturn(或其他流控制机制)。这可以用于统一特定案例的逻辑,也可以用于更复杂的任务。参见例如:达夫设备。

于 2013-01-16T21:33:55.970 回答
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
}

除了到达开关的尽头之外,本质上没有出口。但是,可以添加一个“break;”。在 case 下的任何地方声明,以使代码提前退出 switch(或超出范围)。

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

于 2013-01-16T21:37:18.457 回答