Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个switch语句返回ZeroHello World而不是零?_C_Switch Statement - Fatal编程技术网

为什么这个switch语句返回ZeroHello World而不是零?

为什么这个switch语句返回ZeroHello World而不是零?,c,switch-statement,C,Switch Statement,多选题:以下代码的结果是什么 int x=0; switch(x) { case 1: printf( "One" ); case 0: printf( "Zero" ); case 2: printf( "Hello World" ); } 选项: 一 零 你好,世界 零你好世界 我以为它只会返回零。我已经研究了int值是什么,它改变了输出,但我不能理解这里发生了什么。它是4,ZeroHelloWorld。这是因为你没有使用休息。所发生的是,您的代码正确地到达案例0并执行该代码。

多选题:以下代码的结果是什么

int x=0;
switch(x)
{
  case 1: printf( "One" );
  case 0: printf( "Zero" );
  case 2: printf( "Hello World" );
}
选项:

一 零 你好,世界 零你好世界
我以为它只会返回零。我已经研究了int值是什么,它改变了输出,但我不能理解这里发生了什么。

它是4,ZeroHelloWorld。这是因为你没有使用休息。所发生的是,您的代码正确地到达案例0并执行该代码。但接下来发生的事情是,它一直在继续,因此出现了Hello World。为了防止这种情况,您需要使用break语句,如下所示-

int x=0;

switch(x){
case 1:
    printf("One");
    break;

case 0: 
    printf("Zero");
    break;

case 2:
    printf("Hello World");
    break;
}
这实际上是零


如果将x设置为1,则可以更清楚地看到问题。然后,您将打印出OneZeroHello World。

在C中,case语句将失效,即case语句将在第一个true条件下开始执行,并在case语句结束或遇到退出时继续执行

您需要像这样显式退出

int x=0;
    switch(x)
    {
    case 1: printf( "One" );
            break;
    case 0: printf( "Zero" );
            break;
    case 2: printf( "Hello World" );
    }
case标签仅确定代码在开关中的哪个点开始执行。一旦进入开关,除非有中断,否则代码执行将通过并继续执行

因此,在第0种情况下输入开关,并打印零。由于没有中断,因此也将执行下一条语句,您的输出将是ZeroHello World

如果只希望0作为输出,则需要:

int x=0;
switch(x)
{
      case 1: printf( "One" ); 
         break;    // note the "break"
      case 0: printf( "Zero" ); 
         break;         
      case 2: printf( "Hello World" ); 
         break;
}

中断将导致在printfZero之后停止执行;并将退出开关。

只是详细说明前面的答案

在C语言和其他语言中,switch语句中的case用作标签。基于x的值,它将转到正确的case语句,但随后它将遍历该语句下面的其他case语句,除非您有“break”语句

除此之外,最好在末尾使用默认值,这样,如果X的值不是0、1或2,那么行为仍然是可预测的。我想这意味着你的代码应该是

int x=0;
switch(x)
{
  case 1: printf( "One" );
          break;
  case 0: printf( "Zero" );
          break;
  case 2: printf( "Hello World" );
          break;

  default: printf("X is out of range, it was %d\n", x);
}
默认情况下不需要break语句,因为它是最后一个语句

查找语法

希望这有帮助,结果是4。 实际上,switchx中的x只是指示执行的起点。你需要休息来休息。
因此,在不中断的情况下,开关将开始执行case x中的语句,直到执行以下所有情况

我以为它只会返回零为什么?假设不能代替学习编程语言的基础知识。而且,没有返回任何内容。请阅读以下内容:谢谢你,我没有意识到没有休息