在C编程中没有案例声明,而不是btw的切换案例

时间:2017-04-10 16:30:06

标签: c switch-statement

我可能用错误的方法做这件事。但我只是想用C编程来锻炼我的大脑。用自己编写的“yahtzee”命令行游戏来学习任何导致我必须学习以完成任务的任务。

我知道有一种叫做“案例陈述”的事情。但每次我google它。我继续得到“switch case statement”。

让我怀疑C甚至有案例陈述

此时我试图做的就是调用相同的函数5次,并将每个不同的返回值放入一个单独的变量中。然后使用从最后一个中删除的下拉案例语句打印出每个变量值。

但它似乎没有调用该功能,因为它通过交换机掉落。因为我似乎无法找到在C中编写case语句的正确方法而不是switch-case。

所以纠正我,如果我错了,但不会是一个case语句执行命令,而似乎开关不是。

这里的代码不多,所以我将完全发布它。所以你可以看到我真正在做什么。

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

int randon_number(int min_num, int max_num);

int main(int argc, char **argv[])
{


  int i =0, die1 = 0, die2 = 0, die3 = 0, die4 = 0, die5 = 0, num = 0;

  switch (i) {
   case 1:
     die1=randon_number(1,6);
   case 2:
     die2=randon_number(1,6);
   case 3:
     die3=randon_number(1,6);
   case 4:
     die4=randon_number(1,6);
   case 5:
     die5=randon_number(1,6);
     break;
 }
// checking just to make sure that it is working written like this.
  num=randon_number(1,6);

  printf("this is num %d\n\n", num);

  printf("d1 %d d2 %d d3 %d d4 %d d5 %d\n", die1, die2, die3, die4, die5);

 return 0;
}

int randon_number(int min_num, int max_num)
{
  int result = 0, low_num = 0, hi_num = 0;

  if (min_num < max_num)
  {
    low_num = min_num;
    hi_num = max_num + 1; // include max_num in output
  } else {
    low_num = max_num + 1; //include max_num in output
    hi_num = min_num;
  }

  srand(time(NULL));
  result = (rand() % (hi_num - low_num)) + low_num;
  return result;
  }

交换机中的所有内容都返回零。我确实认为一个案例实际执行命令,交换机会不会或不应该这样做?

即使我正在寻找案例陈述。我厌倦了啄食和狩猎的方法,这就是我发布这个问题的原因。

 case (i) {
    1;
     num=randon_number(1,6);
    2;
      printf("this is num %d\n\n", num);
      break;
  }

或我尝试过的任何其他变体都不起作用。

这是一个BASH案例语句,实际上多次调用该函数并为每个变量获取正确的返回值。

#!/bin/bash

rannum (){
  number=$((RANDOM%3))

 return $number
 }


var=1

case $var  in 

1)
  {
   rannum
   num1=$number
   rannum
   num2=$number
   }
   ;;
 2)
  {
  num1=rannum
  }
  ;;
  esac

 printf "$num1 - $num2\n" 

3 个答案:

答案 0 :(得分:1)

C中的case关键字不是声明;它生成标签,并且仅在switch语句的上下文中有效。所以是的,你的谷歌搜索是正确的:开关/案例就是这样。不确定你还在期待什么或为什么。

另请注意case的几个限制:仅限整数值,您必须使用break明确终止。

答案 1 :(得分:0)

switch语句中的执行不仅限于case标签限制的伪块。

您需要通过switch语句通知编译器在每个案例结束时(如果这确实是您想要的)退出break语句

switch (x) {
    default: printf("--"); break;
    case 1: printf("1"); break;
    case 2: case 3: printf("23"); break;
}

答案 2 :(得分:0)

您的switch语法略有错误。举个例子

switch(i)
  {
case 1:
  printf("1\n");
case 2:
  printf("2\n");
break;
case 3:
  printf("3\n");
break;
default:
  printf("?\n");
break;
  }

如果i为1则输出1,但由于该情况不会以中断结束,因此会继续显示下一个案例并打印出2.但是如果i是3,然后它打印出3,因为案例标签的末尾有一个中断。如果它不匹配任何一种情况,它会改为default并打印出问号。

i为0时,您的第一个切换语句不会与任何情况匹配。如果您尝试填充所有die{number}变量,您可能只是想做他们一次一个:

die1=randon_number(1,6);
die2=randon_number(1,6);
die3=randon_number(1,6);