如果我不将case 0放在switch中,为什么我的代码不起作用

时间:2019-11-23 13:06:52

标签: c switch-statement

我在c中使用切换大小写找到了最大的数字。在这里,如果我从案例0开始开关,程序将完美执行。

    IWebElement iscop = driver.FindElement(By.XPath("//*[@id='idRequirement']/div/span[1]/p"));//find element

    string text = driver.FindElement(By.XPath("//*[@id='idRequirement']/div/span[1]/p")).Text;//get element text

        Actions actions = new Actions(driver);
       int length = text.Length;
        actions.DragAndDropToOffset(iscop, 75, 0);

        actions.ClickAndHold(iscop);
        actions.MoveByOffset(75, 0);
        actions.Release(iscop);
        actions.Build().Perform();

但是当我使用情况1而不是情况2时,程序将接受输入,但不显示任何结果。是什么原因?

 #include <stdio.h>
 #include <stdlib.h>

  int main()
     {
     int a,b;
     scanf("%d%d",&a,&b);


     switch(a>b)
     {
     case 0:
        printf("%d is maximum",b);
        break;
     case 1:
        printf("%d is maximum",a);
        break;
     }


    return 0;

2 个答案:

答案 0 :(得分:4)

比较a>b是一个表达式,其结果将为 true false 。在表示(或测试)C中的这些“布尔”值时, false 等效于 true < / em>等同于 一个

因此,第一个代码块中的switch语句将按您期望的那样运行。但是,在第二个代码段中,被测试的表达式可能 从不 的值为2,因此,如果a 不大于b,什么都不会打印! (但是,如果a 大于b ,则case 1:块将运行。)

PS:如果switch后面括号中的表达式的求值与case块内给定switch (...) {} any 不匹配,那么您的代码将默默地忽略该块…… ,除非您添加了default:块(通常在末尾添加,但是它可以放在任何{{1} } 可以)。也许您可以尝试一下以自己查看。

答案 1 :(得分:1)

对于一个switch语句中的启动器,可能没有两个相同的大小写标签。所以这段代码不应该编译

 switch(a>b)
 {
 case 1:
    printf("%d is maximum",b);
    break;
 case 1:
    printf("%d is maximum",a);
    break;
 }

根据C标准(6.8.4.2 switch语句)

  

3每个case标签的表达式应为整数常量   表达式,并且没有两个大小写常数表达式在同一位置   转换后,switch语句的值应相同。 ...

在C中,逻辑表达式的值(例如a > b)可以是整数0(false)或整数1(true)。所以这个switch语句中的大小写标签是正确的

 switch(a>b)
 {
 case 0:
    printf("%d is maximum",b);
    break;
 case 1:
    printf("%d is maximum",a);
    break;
 }