首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数未正确返回字符:编译期间出错

函数未正确返回字符:编译期间出错
EN

Stack Overflow用户
提问于 2013-09-06 22:53:27
回答 3查看 153关注 0票数 1

我目前正在尝试用C语言写一个简单的石头,布,剪刀程序。整个作业的要点是熟悉字符的使用。这是我目前拥有的代码。它是不完整的,因为我被卡住了。

代码语言:javascript
复制
#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

在我看来,这应该工作得很好……我不知所措。

EN

回答 3

Stack Overflow用户

发布于 2013-09-06 22:55:50

您没有声明函数computerPlay()

在声明此函数后进行检查。

代码语言:javascript
复制
char computerPlay(void);   

将此语句添加到#include<stdio.h>之后

编辑:

C中的所有标识符在使用之前都需要声明。对于函数和变量都是如此。对于函数,声明需要在函数的第一次调用之前。完整的声明包括返回类型以及参数的数量和类型

简单的例子:

代码语言:javascript
复制
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;
    }
票数 3
EN

Stack Overflow用户

发布于 2013-09-06 23:02:56

当编译器遇到函数的使用时,它需要知道该函数的存在。

在您的代码中,当编译器(读取源文件)遇到comp = computerPlay();时,它没有看到任何东西告诉它函数的存在。它猜测函数是什么,并猜测int computerPlay(void) -默认情况下,C总是假定函数返回int。然后,它在稍后遇到实际的定义,这与它已经做出的猜测相冲突-该函数返回char,而不是int

解决方法是在你使用函数之前让编译器知道它的存在。您可以执行以下任一操作:

  • 将整个函数定义移至main
  • put a main之上,表示它只对此源文件可用
  • 将声明char computerPlay(void);放入单独的头文件中,并将该文件放在#include上,从而使该函数对其他源文件可用(假设有超出本问题范围的其他步骤)<代码>H217<代码>F218
票数 2
EN

Stack Overflow用户

发布于 2013-09-06 23:17:53

您正在使用两个函数,一个是

char computerPlay(),第二个是

include int printScore(int p,int c,int t)必须首先在include语句下面声明。

因此,只需在include语句下面编写以下语句即可。

char computerPlay();

int printScore(int,int,int );

其次,您还使用了、int、main ()、,所以在最后必须返回整数,所以还必须在主的末尾添加以下语句,return 0、或任何其他整数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18660663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档