- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我还在和我叔叔一起学习 C,我在尝试编译我们一起编写的玩剪刀石头布的程序时遇到了另一个麻烦。我在该程序上还有更多工作要做,但我什至无法让大部分内容正常工作。
我使用 Make 命令从编译器收到的错误
main.c: in function 'start_play':
main.c:79:7: error: format '%s' expects argument type 'char *', but argument 2 has type 'int' [-werror=format=]
scanf("%1s", human_hand[0]);
main.c:82:11: error: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Werror=format=]
fprintf( stderr, "Player 1 has entered an invalid hand choice, %s.", player_1);
main.c:104:1: error: ISO C forbids nested functions [-Werror=pedantic]
int choice_to_int(const char a)
main.c:104:1: error: ISO C90 forbids mixed declarations and code [-Werror=pedantic]
main.c 132:1: error: expected declaration or statement at end of input
}
main.c:132:1: error: expected declaration or statement at end of input
main.c:60:6: error: unused variable 'choice' [-Werror=unused-variable]
enum choices choice;
这是 main.c 文件的内容,我似乎无法理解。
/*
Programmer: Tim Bowen
Creation Date: 2014/05/26
Last Updated: 2014/05/27
Project Name: RPS(Rock/Paper/Scissors)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int gen_hand( );
void start_play();
int choice_to_int(const char a);
int main ( int argc, char *arga[], char **env)
{
start_play( );
return 0;
} /*end main*/
/*
Precondition: Srand must but initialized before usage of gen_hand
Post condition: function returns either 0, 1 or 2.
*/
int gen_hand( ) {
return((rand() % 3 ));
}
void start_play( ) {
enum choices { ROCK, PAPER, SCISSORS };
enum choices choice;
const char *rps[] = {"Rock", "Paper", "Scissors"};
int player_1, player_2;
char answer[2];
char human_hand[2];
srand(time(NULL));
printf("%s\n", "This program plays Rock, Paper, Scissors.");
printf("%s\n", "Version 0.2");
do{
printf("%s\n", "Do you want to play against the computer? (Y/N):");
printf("%s\n", "Any other character to quit.:");
scanf("%1s", answer);
printf("%s\n", answer);
break;
if(answer[0] == 'y' || answer[0] == 'Y')
{
printf( "%s\n", "Please enter your hand(R/P/S):");
scanf("%1s", human_hand[0]);
player_1=choice_to_int(human_hand[0]);
if(player_1==3){
fprintf( stderr, "Player 1 entered an invalid hand choice, %s", player_1 );
/* err_hand();
break;} */
player_2=gen_hand( );
printf( "Player one => %d\n %2s", player_1, rps[player_1]);
printf( "player two => %d\n %2s", player_2, rps[player_2]);
}
else if (answer[0] == 'n' || answer[0] == 'N' )
{
player_1=gen_hand( );
player_2=gen_hand( );
printf( "Player one => %d\n %2s", player_1, rps[player_1]);
printf( "player two => %d\n %2s", player_2, rps[player_2]);
}
else {
break;
}
while (1);
return;
}
/*
precondition: user passes in either, Rr, Pp, Ss, or another incorrect response.
post condition: function returns either 0, 1, or 2 for correct responses, or 3 for erroneous ones.
*/
int choice_to_int(const char a)
{
int r;
switch ( r ) {
case 'R':
case 'r':
r=0;
break;
case 'P':
case 'p':
r=1;
break;
case 'S':
case 's':
r=2;
break;
default:
r=3;
break;
}
return (r);
}
我为几乎过多的额外行表示歉意,但我这样做是为了(希望)更容易阅读。我不确定这次我做错了什么,因为我几乎完全从类笔记中复制了这一点。我无法继续尝试添加我应该添加的部分,因为我无法让我们一起编码的部分正常工作。当我叔叔编译示例时,没有出现这些错误。
编辑:到目前为止,给出的答案已经帮助清除了所涉及的大部分错误,除了一个新错误:
main.c:58:5 error: format '%s' expected arguments of type 'char ', but argument 2 has type 'char ()[2]' [-Werror=format]
它仍然提示我没有使用变量“选择”,但说实话,我不确定如何使用选择。我可能没有说清楚,但我没有直接“写”这个。我在叔叔写的时候提出建议,然后“课”结束后我在我的机器上重写了它。我并没有真正声称完全理解我在这里所做的事情......该程序应该是显而易见的(对于具有丰富编码经验的人......),但我想我没有明白。
它应该选择玩石头/剪刀/布,并提供让计算机自己玩的选项(else if语句),我们使用枚举来指定选择,然后使用choice_to_int来接受用户输入并将其转换回与枚举匹配的值,并允许我根据这些值的比较创建“赢/输/平局”语句。我可能建议了一些愚蠢的方法来实现这个想法,但这就是想法。我还没有达到可以创建赢/输/平局语句的程度,或者如果用户决定放入不适合游戏格式的内容(例如,Z 或其他内容)时处理错误。
感谢您迄今为止的帮助,并在这个也许不必要地复杂的石头/剪刀/布的实现上对我的帮助...
最佳答案
一些一般建议:不要编写包含数十个问题的 100 行代码,而是一次编写一小段代码,检查其是否全部正常工作,然后继续处理下一段代码。
其他答案尚未提及的问题:
<小时/>int gen_hand( );
void start_play();
应该是:
int gen_hand(void);
void start_play(void);
void
表示该函数不带参数;空括号意味着我们还不知道需要多少(如果你不正确,你的程序可能会搞砸)。
接下来,scanf("%1s", answer);
和 scanf("%1s", human_hand[0]);
。使用 scanf
您必须告诉它在哪里写入您读取的字符。相反,你告诉它这些东西的当前值。使用 &
运算符获取目标位置的地址。
在此代码中:
if(player_1==3){
fprintf( stderr, "Player 1 entered an invalid hand choice, %s", player_1 );
/* err_hand();
break;} */
您永远不会关闭{
,因为您注释掉了结束的}
。您不应该注释掉 break;}
,因为这意味着您继续使用 3
作为越界的数组索引。
在 printf( "player 二 => %d\n %2s", player_2, rps[player_2]);
中,2
表示:打印至少 2人物。所有字符串都比 2 长得多,因此这没有效果。你想做什么?
关于c - 对石头/剪刀/布感到沮丧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975074/
所以,我正在用 Python 制作这款游戏。问题是,在剪刀、布和石头中可以有不同的组合,例如..石头和布、石头和剪刀等等。那么,如果不执行大量 elif 语句,我将如何做到这一点。 import
我是 javascript 新手,正在开发一个简单的石头、剪刀、布、蜥蜴、斯波克游戏。我想让用户从 5 张图像中进行选择,而不是在提示中填写。有谁知道我该怎么做?警报和确认消息最终也应该是 或类似的内
我正在制作一个小剪刀石头布游戏,我以为我已经完美地计划了一切,但由于某种原因,当你尝试玩时什么也没有发生。 基本上,有三张图像,一 block 石头、一张纸和一些剪刀,然后你单击一个。使用我输入的代码
我试图学习python并以此开始,当我尝试运行它时,我一直收到语法错误。光标跳到def start部分的close结束处。我不确定语法错误来自哪里,因为我用语音标记了所有打印件 #! python3
我有点困惑如何创建一个字段,其中将显示您获胜或平局的次数。喜欢: | Wins: | 234 | | Looses:| 234 | | Draws: | 434 | 意思是,如果我和新闻报纸赢得了答
如何让玩家玩随机数量的比赛,然后以全部分数结束游戏? 我正在尝试做一个循环,让玩家玩多场比赛,并在最后询问是否还想玩。 public class RockPaperScissors { pub
每当我运行它时,似乎继续玩的循环都有效,但是每当 computerChoose 执行 randomGenerator 时,游戏结果都不会正确输出。请帮忙。我是java新手,我们只打算使用3种方法——指
我的石头剪刀布游戏遇到问题。当我玩游戏时,它会将胜利或失败记录为胜利和失败。我试图让它记录一场胜利和一场失败,并且不会为胜利和失败添加分数。有什么建议吗? import java.io.*; publ
我正在制作石头剪刀布游戏。 下面的代码可以工作,但是缺少两个关键的东西,我真的很想知道如何实现它: 如果出现平局,玩家必须能够重新选择。所以必须执行break语句,但是需要什么才能返回到while循环
显然是在学习java。我能够让游戏正常运行。但我需要这样做,以便如果用户放置 R/P/S 以外的东西,那么它默认为 Rock。我不需要循环。如果我放石头的话,游戏就完美了。如果我放置 RPS 以外的任
#RoShamBo import random count=0 while count -2: compnum=random.randint(0,2) usernum=int(inpu
我用Python做了一个石头、剪刀、布的游戏。如果用户输入"is",我如何让游戏重复进行?当用户输入除了石头、布或剪刀之外的任何内容时,我的代码似乎进入永无休止的循环 此外,我正在尝试了解何时何地应该
我还在和我叔叔一起学习 C,我在尝试编译我们一起编写的玩剪刀石头布的程序时遇到了另一个麻烦。我在该程序上还有更多工作要做,但我什至无法让大部分内容正常工作。 我使用 Make 命令从编译器收到的错误
这是我的石头剪刀布游戏。 http://jsfiddle.net/Renay/hL3j5hm6/6/ 如何添加动画,在给出结果之前,图像上下弹跳时有 3,2,1 倒计时。我尝试过添加各种功
我的类(class)本周将举行机器人竞赛,我们应该让我们的机器人战胜其他人的机器人。比赛项目为石头、布、剪刀、炸药、水气球。炸药胜过一切,除了水气球,而水气球只胜过炸药。老师写了竞技场,还有其他一些机
我正在使用 Python 创建一个非常简单的石头剪刀布游戏,但无法解决这个问题。每次我在命令提示符中输入答案时,它都会输出消息“无效输入,请重试!”,这就是我告诉它在存在无效输入时执行的操作。但是,我
我遇到了一个问题,选择根本没有更新。我已经列出了每次选择后应显示最后结果和当前分数的位置。分数运行良好,但选择根本没有更新。谢谢。 Dynamic Web Squirtle,
我的图片和消息正在更改为显示获胜、失败、平局,但我的 javascript 增量似乎不起作用,因为我的分数没有改变。请帮忙:) Rock, Paper, Scissors Rock
我正在用 C# 制作石头、剪刀、布游戏,目前在有人输入非 R、S 或 P 的输入时尝试显示消息时遇到问题。例如,我正在尝试获取默认值在 switch 语句中工作,但我没有运气。这就是我目前所拥有的。如
我希望代码获取用户在输入字段中输入的值并将其传递给变量 userChoice。我不知道为什么这段代码不起作用,唯一的学习方法就是问你们。 HTML: Choose your destiny !
我是一名优秀的程序员,十分优秀!