C srand和决策问题

C srand和决策问题,c,if-statement,switch-statement,srand,C,If Statement,Switch Statement,Srand,我对C编程完全是新手,遇到了一些问题 我正在尝试创建一个单词搜索,但是遇到了一个问题。 我正在尝试将一个数字随机化,这样包含单词的数组将是随机的。 srand在我添加决策或任何其他编码之前工作 我使用开关盒是因为我的else if有问题 代码如下: #include <stdio.h> #include<string.h> #include <time.h> #define ARRAY_SIZE 10 int main (void) { in

我对C编程完全是新手,遇到了一些问题

我正在尝试创建一个单词搜索,但是遇到了一个问题。

我正在尝试将一个数字随机化,这样包含单词的数组将是随机的。 srand在我添加决策或任何其他编码之前工作

我使用开关盒是因为我的else if有问题

代码如下:

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

#define ARRAY_SIZE 10


int main (void)
{

    int r;

    srand(time(NULL));

    r = (rand() % 3) + 1 ; //random number

    printf ("%d\n", r);

    char *names1[]= {"DOG" , "CAT", "HORSE" , "SNAKE" };
    char *names2[]= {"RAT", "FOX", "FISH", "DRAGON" };
    char *names3[]= { "TIGER", "COW", "SHARK", "BEAR" };


    switch(r)
    {
    case '1' : printf (" %s", names1); 
        break;

    case '2' : printf (" %s", names2); 
        break;

    case '3' : printf (" %s", names3); 
        break;

    default : puts ("Invalid");



   getchar();
   return 0;
}
#包括
#包括
#包括
#定义数组大小为10
内部主(空)
{
INTR;
srand(时间(空));
r=(rand()%3)+1;//随机数
printf(“%d\n”,r);
char*names1[]={“狗”、“猫”、“马”、“蛇”};
char*names2[]={“老鼠”、“狐狸”、“鱼”、“龙”};
char*names3[]={“老虎”、“牛”、“鲨鱼”、“熊”};
开关(r)
{
案例“1”:printf(“%s”,名称1);
打破
案例“2”:printf(“%s”,名称2);
打破
案例“3”:printf(“%s”,名称3);
打破
违约:看跌期权(“无效”);
getchar();
返回0;
}

'1'
1
不同。将
案例“1”更改为
案例1:


其他案例陈述中的类似更改。

'1'
1
不同。将您的
案例'1':
更改为
案例1:


其他案例陈述中也有类似的变化。

我已经解决了这个问题。谢谢所有的答案。 这是一个完全适用于有相同问题的人的程序

#包括
#包括
#包括
#定义数组大小为10
内部主(空)
{
int l;
INTR;
char*names1[]={“狗”、“猫”、“马”、“蛇”};
char*names2[]={“老鼠”、“狐狸”、“鱼”、“龙”};
char*names3[]={“老虎”、“牛”、“鲨鱼”、“熊”};
srand(时间(空));
r=(rand()%3)+1;//随机数
开关(r)
{
案例1:

对于(l=0;l我已经解决了这个问题。谢谢所有的答案。 这是一个完全适用于有相同问题的人的程序

#包括
#包括
#包括
#定义数组大小为10
内部主(空)
{
int l;
INTR;
char*names1[]={“狗”、“猫”、“马”、“蛇”};
char*names2[]={“老鼠”、“狐狸”、“鱼”、“龙”};
char*names3[]={“老虎”、“牛”、“鲨鱼”、“熊”};
srand(时间(空));
r=(rand()%3)+1;//随机数
开关(r)
{
案例1:


对于(l=0;l)您遇到的问题是什么?
1
1
非常不同。看起来您需要调用
rand()
两次:一次选择哪一组动物,另一次选择其中的动物。因此
rand()%3
然后
rand()%4
。坚持使用基于0的值,仅调整0->1以供人类使用。我只需要选择动物集,因此我认为我只需要调用rand()一次。我遇到的问题是程序甚至无法编译。您缺少结束
switch
语句的右括号。您必须使用整数文本(
case 1:
)而不是开关中的字符文本(
case'1':
),因为随机表达式的结果是一个整数,而不是一个字符(字符文本
'1'
的值与整数文本
1
的值不同)。您不能以
格式打印
名称1
因为它是一个字符串数组(而不是一个简单的字符串),所以您必须决定是打印
名称1[0]
,还是要使用哪个索引(这里可能需要另一个随机调用)。您遇到了什么问题?
'1'
1
非常不同。看起来您需要调用
rand()
两次:一次选择哪一组动物,另一次选择其中的动物。因此
rand()%3
然后
rand()%4
。坚持以0为基础的值,仅为人类消费调整0->1。我只需要选择动物组,因此我认为需要调用rand()只有一次。我遇到的问题是程序甚至没有编译。您缺少结束
switch
语句的右括号。您必须在开关中使用整数文本(
案例1:
),而不是字符文本(
案例1:
),因为随机表达式的结果是整数,而不是字符(字符文字
'1'
的值与整数文字
1
的值不同)您不能使用格式
“%s”
打印
names1
,因为它是字符串数组(而不是简单的字符串),您必须决定是否打印
names1[0]
,或者要使用哪个索引(也许另一个随机调用可以帮上忙)。我已将“1”替换为1。但是仍然会出现错误。名称1等的未声明标识符丢失;之前type@Takan:将所有本地声明放在函数的顶部。正如@Jongware所指出的,您可能需要在main()的开头声明变量函数。可能是您在C89/C90模式下编译,这需要在块的开头声明变量。在任何情况下,发布准确的错误消息都将有助于更轻松地解决问题。我已更新了代码。出现以下错误:1>c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(16):警告C4013:'srand'未定义;假设外部程序返回int 1>c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(18):警告C4013:'rand'未定义;假设外部程序返回int 1>c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(74):致命错误C1075:在“c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(9)”的左大括号“{”之前找到文件结尾matched@Takari如果要从每个数组中打印一个动物,则可能根本不需要开关盒(因为
r
被计算为在数组的范围内).看:这完全取决于你想做什么。我已经换了
case '1' : printf (" %s", names1); 
case 1 : printf (" %s", names1[r]);