2013-09-06 2 views
1

현재 C에서 간단한 Rock, Paper, Scissors 프로그램을 작성하려고합니다. 할당의 전체적인 포인트는 문자 사용에 익숙한 것입니다. 현재 가지고있는 코드는 다음과 같습니다. 내가 붙어있는 것처럼 그것은 불완전하다. 내가 손해를보고있어 ....함수가 올바르게 char을 반환하지 않음 : 컴파일 중 오류

RPS.c:35:6: error: conflicting types for ‘computerPlay’

RPS.c:28:14: note: previous implicit declaration of ‘computerPlay’ was here

그것은이 잘 작동해야 나에게 보인다

#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; 
} 

컴파일러는 나에게 다음과 같은 오류를주고있다 .

+2

ㅎ 'char computerPlay() {return "rpc"[rand() % 3]; }'sry. 저항 할 수 없었다. – WhozCraig

답변

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

+1 또는 def를'main()'위로 옮기십시오. – WhozCraig

+1

그리고 함수를 내보내고 싶지 않다면 정적으로 만드십시오. (컴파일러의 경고 옵션을 발견 할 때까지 기다리십시오.) – rockdaboot

+0

@WhozCraig, rockdadoot 예, main 앞에 선언해야합니다. 선언은 전역 (정적 또는 비 정적)이어야하며 함수의 정의 앞에 있어야합니다. 정적 선언 ** static char computerPlay (void); ** 범위를 제한하려면 좋은 생각입니다. 감사. – Gangadhar

2

, 그것의 존재에 대해 알 필요가있다 : 전체 선언은 반환 타입과

간단한 예는 인수의 수와 유형을 포함 함수.

코드에서 컴파일러 (소스 파일 읽기)가 comp = computerPlay();을 충족 시키면 함수가 있음을 알리는 메시지가 표시되지 않습니다. 함수가 무엇인지 추측 할 수 있으며, int computerPlay(void)을 추측합니다. 기본적으로 C는 항상 int을 반환한다고 가정합니다. 그런 다음 실제 정의가 나중에 발생합니다. 이는 이미 작성한 추측과 충돌합니다. 함수는 이 아니라 char을 반환합니다.

해결 방법은 컴파일러가 함수를 사용하기 전에 존재한다는 것을 컴파일러에서 인식하도록하는 것입니다.다음 중 하나를 수행 할 수 있습니다 :

  • 이동 main
  • 위의 전체 기능 정의는 단지
  • 별도의 헤더 파일에 선언 char computerPlay(void);를 넣어이 소스 파일에 사용할 수 나타내는 main 위에 선언 static char computerPlay(void);을 넣어 #include 그 파일을 main 위의 파일로 복사하여 다른 소스 파일에서이 함수를 사용할 수 있도록하십시오 (이 질문의 범위를 벗어나는 다른 단계가 있음)
1

당신은 두 기능을 사용하는 것은

숯 computerPlay() 및 제 한

이다

이들 제 모두 아래 선언하는 데 필요한 INT printScore (INT의 C, INT의 t는 INT P) include 문.

그래서 include 문 아래에 다음 문장을 작성하십시오.

char computerPlay();

int printScore (int, int, int); 당신은 또한 사용하는

두 번째 것은 INT 주() 그래서 당신은 또한 주요 반환 0 또는 기타 정수의 끝 부분에 다음 문을 추가해야 있도록 정수를 반환하는 데 필요한 말.

관련 문제