我在一个介绍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行控件到达非空函数的结尾
任何帮助都会很棒。我还有很长的路要走这项任务,但我很早就陷入了困境。
答案 0 :(得分:2)
有些事情:
=
与等于==
运算符不同。第一个用于为变量赋值,第二个用于检查相等性代码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语句只是痛苦的。