问题从C中的单词列表中选择一个随机单词

时间:2010-11-21 19:17:03

标签: c random

我在一个介绍C编程课程,我正在尝试编写一个刽子手游戏。我目前处于非常早期的阶段,并希望得到帮助,我有计算机的部分选择用于游戏的单词。以下是我到目前为止的情况:

#include <string.h>  
#include<string.h>  
#include <time.h> /* contains prototype for function time */  
#define MAX 10  

int main()  
{   
int randnum;
char gameword[MAX];
randnum = 1+(rand() % 20);
printf("%d\n", randnum);

if (randnum=1)(
    gameword= char word1[MAX]=who);
if randnum=2(
    gameword=char word2[MAX] = lives);
if randnum=3(
   gameword=char word3[MAX] = in);
if randnum=4(
   gameword=char word4[MAX] = a);
if randnum=5(
   gameword=char word5[MAX] = pineapple);
if randnum=6(
   gameword=char word6[MAX] = under);
if randnum=7(
   gameword=char word7[MAX] = the);
if randnum=8(
   gameword=char word8[MAX] = sea);
if randnum=9(
   gameword=char word9[MAX] = absorbant);
if randnum=10(
   gameword=char word10[MAX] = and);
if randnum=11(
   gameword=char word11[MAX] = yellow);
if randnum=12(
   gameword=char word12[MAX] = porous);
if randnum=13(
   gameword=char word13[MAX] = is);
if randnum=14(
   gameword=char word14[MAX] = he);
if randnum=15(
   gameword=char word15[MAX] = sponge);
if randnum=16(
   gameword=char word16[MAX] = bob);
if randnum=17(
   gameword=char word17[MAX] = square);
if randnum=18(
   gameword=char word18[MAX] = pants);
if randnum=19(
   gameword=char word19[MAX] = crabby);
if randnum=20(
   gameword=char word20[MAX] = patties);

printf("%c", gameword);
return 0;
}  

我收到的错误如下:

  

第19行建议围绕赋值的括号用作真值

     

第20行预期在'char'

之前的表达式      

第64行预期';'在'}'标记之前

     

第64行控件到达非空函数的结尾

任何帮助都会很棒。我还有很长的路要走这项任务,但我很早就陷入了困境。

7 个答案:

答案 0 :(得分:2)

有些事情:

  • 在C(和许多其他语言)中,赋值运算符=与等于==运算符不同。第一个用于为变量赋值,第二个用于检查相等性
  • 代码gameword=char word2[MAX] = lives);没有多大意义,你想做什么?你想在一个单词列表之间进行选择。您应首先使用类似

    之类的代码硬编码(我猜)

    char *words[]={"foo", "bar", "baz", "lol"};

然后生成随机数并选择正确的字符串,例如words[randnum]

答案 1 :(得分:0)

// ...
if (randnum == 13)
  gameword = "is"; else
// ...

printf("%s\n", gameword);

这是你的代码,更像C:

#include <string.h>  
#include<string.h>  
#include <time.h> /* contains prototype for function time */  

int main()  
{   
  int randnum;  
  char gameword[10];

  randnum = 1 + (rand() % 20);  
  printf("%d\n", randnum);  

  switch (randnum)
  {
    case 1:
        gameword = "who";
    break;  

    case 2:
        gameword = "lives";
    break;

    case 3:
        gameword = "in";
    break;

    case 4:
        gameword = "a";
    break;

    case 5:
        gameword = "pineapple";
    break;

    case 6:
        gameword = "under";
    break;

    case 7:
        gameword = "the";
    break;

    case 8:
        gameword = "sea";
    break;

    //...
  }

  return 0;
}

答案 2 :(得分:0)

您应该能够通过观察正确的代码并进行视觉比较来发现很多错误。你使用了错误的符号,你的括号不匹配,gameword=行看起来很奇怪。

如果声明

if (randnum=1)(
    gameword= char word1[MAX]=who);
  • 使用两个相等的符号进行比较。
  • 条件表达式周围需要一组平衡的括号。
  • 使用大括号{}围绕if语句中的代码。
  • 您需要引用"who""pineapple"等字符串。双引号。
  • 你的作业陈述甚至不是很接近,抱歉。你的目标是gameword = "who";
  • 除了gameword = "who";之外,您将收到有关非法分配给数组的错误。进入这里太过分了,但是说你需要使用strcpy函数就足够了:strcpy(gameword, "who")

接受所有这些评论,这是一个有效的if语句,你可以用作模型:

if (randnum == 1) {  
    strcpy(gameword, "who");
}

打印

printf("%c", gameword);

%c格式说明符用于打印单个字符。您正在尝试打印字符串,因此请改用%s。如果你在最后添加一个换行符'\n',它看起来会更好。

printf("%s\n", gameword);

随机数

一旦你完成编译,你最终会看到每次打印的同一个单词。 rand()函数只是一个伪随机数生成器。它返回的随机数不是真正随机的;它们实际上是使用固定算法生成的。这意味着它将始终以相同的顺序返回相同的随机数,除非您种子随机数生成器。

一个体面的种子是系统时钟。时钟会定期更改,因此您可以使用它为RNG提供不同的种子数。在致电rand()

之前,请在程序顶部插入此行
srand(time(NULL));

答案 3 :(得分:0)

首先,您需要使用==作为条件运算符randnum=1

==比较,=分配

接下来,您遇到语法问题。它应该是if (randnum == 20)

但是,您可能希望将字符串放入数组中。所以你可以使用数组偏移量。

答案 4 :(得分:0)

使用else if代替第二个和下一个if

答案 5 :(得分:0)

你应该使用else而不是if,if,if,if ......这样一旦它击中了正确的选项,它就不会在更长时间内检查其他选项。

此外,=是赋值,==用于比较。

然后,除了第一个“如果”之外,所有其他人都错过了条件:

if randnum=2(
    gameword=char word2[MAX] = lives);

应该是

if (randnum=2)
    gameword=char word2[MAX] = lives);

答案 6 :(得分:0)

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


int main (void) {
    const int numberOfWords = 3
    srand((unsigned)time(NULL)); //generate a random seed based on time so it's different every time!
    int ran = rand()% numberOfWords; //Generate a random number between 0 to numberOfWords - 1
    char *hello[] = {"One", "Two", "Three"}; //Fill in the array with words
    printf("%s", hello[ran]); //Print a string and choose the nth element from the array
    //remember arrays are 0 based!
    return 0;
}

除了所有不匹配的括号,以及==和东西之外,使用20 if语句是不可能的。你真正想要的是拥有一个字符数组并使用你的随机数作为索引。我强烈建议你仔细查看上面的代码,而不是复制和粘贴它。我知道我不应该给你所有的代码,但是很多if语句只是痛苦的