2012-11-09 1 views
3

비슷한 질문이 있지만 특정 문제에 적용한 것으로 생각하지 않습니다. 그렇다면 유감입니다!경고 - 초기화가 캐스트없이 정수에서 포인터를 만듭니다.

나는 CS 학생 1 학년으로 C를 배우며 C로 퀴즈를 만들려고 노력하고 있지만, 작동하는지 확인하기 위해 컴파일 할 때마다 아무 것도 얻을 수 없기 때문에 메시지가 나타납니다. "경고 : 초기화는 캐스트없이 정수에서 포인터를 만듭니다. "

필자는 모든 구문 오류를 해결했지만 (필자는 생각합니다.) 필자의 삶에 대해서는이 사실을 알 수 없습니다. 나는 모든 강의 슬라이드를 다 읽었지만 그 중 어느 것도 이것을 다루지 않습니다.

#include <stdio.h> 
#include <scc110.h> 

int player1score, player2score; 
char* answer1, answer11, answer111, answer2, answer22, answer222; 

int geography() 
{ 
    printf ("The first category is geography. Note: Player 1 always goes first.\n"); 

    char* answer1 = AskForStringAndWait("Player 1: What is the capital of India?"); 
    if (strcmp(answer1,"New Delhi")==0) 
    player1score++; 

    char* answer2 = AskForStringAndWait("Player 2: What is the capital of Iran?"); 
    if (strcmp(answer2,"Tehran")==0) 
    player2score++; 

    char* answer11 = AskForStringAndWait("Player 1: Name a country that borders France that isn't Germany, Italy or Spain."); 
    if (strcmp(answer11,"Luzembourgh")==0 || 
     strcmp(answer11,"Switzerland")==0 || 
     strcmp(answer11,"Belgium")==0) 
    player1score++; 

    char* answer22 = AskForStringAndWait("Player 2: Name one of the main British Channel Islands."); 
    if (strcmp(answer22,"Guernsey")==0 || 
     strcmp(answer22,"Jersey")==0) 
    player2score++; 
} 
+1

함수를 사용하기 전에 함수를 선언해야합니다. – chris

+3

전역 선언에서'answer1' 만'char *'이고, 나머지는 모두'char'입니다. –

+0

전역 변수'answer1' 등은 지역 변수에 의해'geography()'함수에서 음영 처리됩니다. 이것은 종종 혼란을 불러옵니다. 이 경우 전역 변수를 제거하십시오. –

답변

0

당신은 정수 값을 가져 포인터로 변환합니다. AskForStringAndWait의 소스 코드는 무엇입니까? 귀하의 함수가 char을 반환한다고 생각하지만 char 포인터 (char *)에 그 결과를 저장하고 있습니다. 또한 char answer11char * answer11은 서로 일치하지 않습니다. 이름은 같지만 하나는 전역 변수이고 다른 하나는 함수 내부의 지역 변수입니다. 이 선언 answer1에서

0
char* answer1, answer11, answer111, answer2, answer22, answer222; 

char*하고 다른 사람은 char 유형

하지만 지금까지 내가 당신이 그래서 때를 같은 전역 변수

int geography() {} function 

내에서 다시 선언 한 생각으로 이 포인터의 값을 얻으려고합니다. 경고 또는 오류가 발생할 수 있습니다.

이렇게 선언하십시오

char* answer1, *answer11, *answer111, *answer2, *answer22, *answer222;

그리고 함수 내에서

단지 이러한 변수 또한

int는하지만, 당신이이다 geography()의 반환 유형의 문제를 사용 answer1 전에 char *을 사용하는 등

에없는 것입니다 투입하는 char*

2

당신은 AskForStringAndWait 기능을 선언하는 것을 잊었습니다.

현대 C (과거 C99)에서는 오류가 발생합니다. C99에서는 선언되지 않은 함수를 호출 할 수 없기 때문입니다.

C89/90에서는 오류가 아닙니다. 선언되지 않은 함수가 호출되면 int 값을 반환한다고 가정합니다. 그래서, 당신의

char* answer1 = AskForStringAndWait("Player 1: What is the capital of India?"); 

int 값으로 char * 포인터를 초기화하기위한 시도로 해석됩니다. 그러므로 경고.