我可能用错误的方法做这件事。但我只是想用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"
答案 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);