【问题标题】:srand and decisions issuesrand 和决策问题
【发布时间】:2015-11-23 18:17:08
【问题描述】:

我对 C 编程完全陌生,但遇到了一些问题。

我正在尝试创建单词搜索,但是遇到了问题。 https://en.wikipedia.org/wiki/Word_search

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

我正在使用 switch case,因为我遇到了 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;
}

【问题讨论】:

  • 你遇到了什么问题?
  • '1'1 非常不同。
  • 看起来你需要调用rand() 两次:一次选择哪一组动物,再次选择其中的动物。所以rand() % 3 然后rand() % 4。坚持以 0 为基础的值,仅调整 0->1 以供人类消费。
  • 我只需要选择一组动物,因此我认为我只需要调用 rand() 一次。我遇到的问题是程序甚至没有编译。
  • 您缺少右大括号来结束 switch 语句。您必须在开关中使用整数文字 (case 1:) 而不是字符文字 (case '1':),因为随机表达式的结果是整数,而不是字符(字符文字 '1' 的值不同于整数文字1) 你不能用"%s" 格式打印names1,因为它是一个字符串数组(而不是简单的字符串),你必须决定是打印names1[0],还是要打印哪个索引使用(也许另一个随机调用可以在这里提供帮助)。

标签: c if-statement switch-statement srand


【解决方案1】:

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

还有

case '1' : printf (" %s", names1); 

case 1 : printf (" %s", names1[r]); 

其他 case 语句的类似变化。

【讨论】:

  • 我已将“1”替换为 1。但我仍然遇到错误。 names1 等未声明的标识符缺失;输入前
  • @Takan:将所有本地声明放在函数的顶部。
  • 正如@Jongware 所指出的,您可能需要在 main() 函数的开头声明变量。可能是您在 C89/C90 模式下编译,这需要在 块的开头声明变量。 在任何情况下,发布确切的错误消息将有助于更轻松地找出问题.
  • 我已经更新了代码。出现以下错误: 1>c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(16): warning C4013: 'srand' undefined;假设 extern 返回 int 1>c:\users\user\documents\visual studio 2010\projects\fdf\fdf\program.c(18): 警告 C4013: 'rand' undefined;假设 extern 返回 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)' 匹配
  • @Takari 如果你想从 each 数组中打印一个动物,那么你可能根本不需要开关盒(因为 r 被计算在数组的边界)。见:ideone.com/FmAYyD这完全取决于你想做什么。
【解决方案2】:

我已经解决了这个问题。感谢所有的答案。 对于遇到同样问题的人来说,这是一个完全有效的程序。

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

#define ARRAY_SIZE 10


int main (void)
{
	int l;
	int r;
	char *names1[]= {"DOG" , "CAT", "HORSE" , "SNAKE" };
	char *names2[]= {"RAT", "FOX", "FISH", "DRAGON" };
	char *names3[]= { "TIGER", "COW", "SHARK", "BEAR" };

	srand(time(NULL));

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


	

	switch(r)
	{
	case 1 : 
			for (l = 0; l  <4; l++ )
	{
		printf (" %s", names1[l]);
		
	}
		break;

	case 2 : 
			for (l = 0; l  <4; l++ )
	{
		printf (" %s", names2[l]);
		
	}
		break;
	
	case 3 :  
			for (l = 0; l  <4; l++ )
	{
		printf (" %s", names3[l]);
		
	}
		break;

	default : puts ("Invalid");

	}

   getchar();
   return 0;
}

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2011-02-23
    • 2018-01-04
    • 2014-05-11
    • 2017-03-06
    • 2011-05-14
    相关资源
    最近更新 更多