函数未正确返回char:编译期间出错

时间:2013-09-06 14:53:27

标签: c function computer-science systems-programming chars

我目前正在尝试在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

在我看来,这应该工作得很好......我很茫然。

3 个答案:

答案 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>或任何其他整数。