何时使用'如果' vs' switch'声明?

时间:2016-10-27 22:10:30

标签: c

我很擅长用C语言编写和编译小程序,我已经看过关于这个问题的多个线程,但仍然没有找到或理解我正在寻找的答案。我想有人可以解释一下,幼儿园的孩子会理解,为什么if语句比开关好,反之亦然?

我问的原因是因为我觉得在心理上更容易,在交换机和if中完成任务。

我应该练习更多吗?

在没有让我迷失在复杂问题中的情况下,是否会出现切换案例在以后的复杂编程中不起作用的情况?

我的例子是我选择使用开关而不是if来进行Celsius到Fahrenheit的转换。这是一个糟糕的选择"?

任何反馈都会非常受欢迎,特别是如果我能掌握答案的话。

这是我的代码

{
int cel, fah;
char answer = 0;

printf("What would you like to convert from? Type: 'C' Celsius / 'F' for Fahrenheit\t");
scanf(" %c", &answer);

switch(answer){

    case 'C':
    case 'c':
        printf("Enter Temperatur in Celsius:\t");        
        scanf("%d", &cel);

        fah = (cel * 1.8) + 32;

        printf("The Temperature in Fahrenheit is: %d\t\n", fah);
    break;

    case 'f':
    case 'F':
        printf("Enter Temperature in Fahrenheit:\t");
        scanf("%d", &fah);

        cel = (fah - 32) / 1.8;

        printf("The Temperature in Celsius is: %d\t\n", cel);
    break;

    default:
        printf("ERROR!!!\n");
}

return 0;

4 个答案:

答案 0 :(得分:1)

  

在没有让我迷失在复杂问题中的情况下,是否会出现切换案例在以后的复杂编程中不起作用的情况?

理论上,您可以使用单个if-else语句或嵌套switch语句来构建任何switch块。

实际上,switch语句适用于单个整数值。

N.B。以下是意见问题。

如果您有多个条件语句,例如:

if ( a > 10  )
{
   ...
}
else if ( b <= 25 )
{
   ...
}
else
{
   ...
}

使用switch语句不是正确的方法。

如果您能够根据整数值进行分支并且分支超过2个,则最好使用switch语句。

示例1

if ( a == 10 )
{
    doThis();
}
else
{
   doThat();
}

优于

switch (a)
{
   case 10:
      doThis();
      break;

   default:
     doThat();
}

示例2

switch (a)
{
   case 10:
      do10();
      break;

   case 20:
      do20();
      break;

   case 30:
      do30();
      break;

   default:
     doDefault();
}

优于

if ( a == 10 )
{
    do10();
}
else if ( a == 20 )
{
    do20();
}
else if ( a == 30 )
{
    do30();
}
else
{
   doDefault();
}

答案 1 :(得分:0)

if (either compare values are not integer types) Use_if();
else if (both compare values are variables or maybe in the future ) Use_if();
else if (code is easier to understand as if) Use_if();
else if (code is easier to understand as switch) Use_switch();
else if (code guidelines suggest prefer if) Use_if();
else if (code guidelines suggest prefer switch) Use_switch();
else if (many constants are used) Use_switch();
else Use_if();

答案 2 :(得分:0)

要了解两者之间的区别,请考虑完成相同任务的以下两个JS代码块。一个使用if语句,另一个使用switch语句。一个人可以争论一个人的优雅和效率。

与else-if一起使用...

var name = "Wolverine";

if(name=="Spider-Man"){
    console.log("good guy!");
} 
else if(name=="Deadpool"){
    console.log("good guy!");
} 
else if(name=="Loki"){
    console.log("bad guy!");
}
else if(name=="Magneto"){
    console.log("bad guy!");
}
else if(name=="Wolverine"){
    console.log("good guy!");
}
else{
    console.log("hmm…");
}

使用开关...

var name = "Wolverine";
switch(name) {
    case "Spider-Man":
    case "Deadpool":
    case "Wolverine":
        console.log("good guy!");
        break;
    case "Loki":
    case "Magneto":
        console.log("good guy!");
        break;
    default:
        console.log("hmm…");
}

答案 3 :(得分:-1)

对于你的例子,Celsius到Farenheit转换,&#39; if&#39;虽然在性能方面使用开关没有任何问题,但使用开关可能比开关更好。

一个开关基本上只是让你更容易处理你可能根据给定变量的值做出各种不同选择的情况。

假设您有一个可能具有值A - Z的变量,并且对于每个可能的值,您希望执行不同的操作。使用if语句,您最终会得到一长串条件:

if(value == 'A')
{ //do something
}
else if (value =='B'){
//do something else}
....
else{ //default}

开关只是让这更容易处理

switch(value){
case 'A':
  //do thing
  break;
case 'B':
  //do other thing
  break;
default:
  //default
  break;
}

对于具有许多可能值的变量,交换机可以节省您的时间和精力,并且更具可读性。

对于只有两个可能值的东西,比如celsius和farenhiet,这个开关实际上更具可读性或紧凑性。

if(celsius)
{
//do thing
}else{
//do other thing
}

可能比

更具可读性
switch(temperature){
case celsius:
 //do thing
 break;
case farenheit:
 //do thing
 break;
}

更快/更容易编码。

逻辑上,它们是相同的,但你使用的是真正的可读性,努力和时间问题。