我目前正在尝试在C中编写一个简单的Rock,Paper,Scissors程序。作业的全部内容是熟悉使用字符。这是我目前的代码。这是不完整的,因为我被困住了。
#include <stdio.h>
int main()
{
int pScore = 0;
int cScore = 0;
int ties = 0;
char play, go;
char comp = 'r';
printf("Welcome to Rock-Paper-Scissors!\n");
printScore(pScore, cScore, ties);
for ( ; ;)
{
printf("Do you want to play Rock-Paper-Scissors? (y/n): ");
scanf("\n%c", &go);
if(go == 'y' || go == 'Y')
{
printf("Enter your choice (r,p,s): ");
scanf("\n%c", &play);
comp = computerPlay();
printf("Computer plays: %c", comp);
}
else
break;
}
printf("\nThanks for Playing!!\n\n");
}
char computerPlay()
{
int r = rand() % 3;
char c;
if (r == 0)
{
c = 'r';
}
else if (r == 1)
{
c = 'p';
}
else if (r == 2)
{
c = 's';
}
return c;
}
int printScore(int p, int c, int t)
{
printf("\nHuman Wins: %d Computer Wins: %d Ties: %d\n\n", p, c, t);
return 0;
}
编译器给出了以下错误:
RPS.c:35:6: error: conflicting types for ‘computerPlay’
RPS.c:28:14: note: previous implicit declaration of ‘computerPlay’ was here
在我看来,这应该工作得很好......我很茫然。
答案 0 :(得分:3)
您没有声明函数computerPlay()
声明此功能后检查。
char computerPlay(void);
在#include<stdio.h>
编辑:
C中的所有标识符在使用之前都需要声明。对于函数和变量都是如此。 对于函数,声明需要在第一次调用函数之前。 完整声明包括返回类型以及参数的数量和类型
简单的例子:
int sum (int, int); // declared a function with the name sum
result =sum(10,20); // function call
int sum (int a, int b) // defined a function called sum
{
return a + b;
}
答案 1 :(得分:2)
在编译器遇到函数的使用时,它需要知道函数的存在。
在您的代码中,当编译器(读取您的源文件)遇到comp = computerPlay();
时,它没有看到任何告诉它该函数存在的东西。它猜测函数是什么,猜测int computerPlay(void)
- 默认情况下,C总是假设函数返回int
。然后它会遇到后面的实际定义,这与它已经做出的猜测相冲突 - 函数返回char
,而不是int
。
解决方案是让编译器在使用之前知道该函数是否存在。你可以:
main
static char computerPlay(void);
上方张贴main
声明,表明此源文件仅可用char computerPlay(void);
放入单独的头文件中,并#include
将该文件放在main
之上,从而使该函数可用于其他源文件(给定超出此范围的其他步骤)问题)答案 2 :(得分:1)
您正在使用两个功能,一个是
char computerPlay(),第二个是
int printScore(int p,int c,int t)这两个首先必须在include语句下声明。
所以只需在include语句下面加上以下语句。
char computerPlay();
int printScore(int,int,int);
第二件事你也在使用 int main(),所以最后你必须要返回整数,所以你还必须在主返回0 <的末尾添加以下语句/ strong>或任何其他整数。