4

同様の質問を見つけましたが、それらが私の特定の問題に当てはまるとは思わないので、当てはまる場合は申し訳ありません。

私は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++;
}
4

3 に答える 3

4

AskForStringAndWait関数を宣言するのを忘れました。

最新のC(past-C99)では、C99は宣言されていない関数の呼び出しを許可しないため、これはエラーになります。

C89 / 90では、エラーではありません。宣言されていない関数が呼び出されると、int値を返すと見なされます。だから、あなたの

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

char *ポインタを値で初期化する試みとして解釈されintます。したがって、警告。

于 2012-11-09T18:56:15.467 に答える
0

整数値を取り、それをポインターに変換しています。ソースコードは何AskForStringAndWaitですか?あなたの関数はcharを返すと思いますが、その結果をcharポインター(char *)に格納しています。また、とは同等char answer11ではないことに注意する必要があります。char * answer11それらは同じ名前ですが、1つはグローバル変数であり、もう1つは関数内のローカル変数です。

于 2012-11-09T18:53:08.303 に答える
0
char* answer1, answer11, answer111, answer2, answer22, answer222;

この宣言answer1ではchar*であり、他はcharタイプのみです

しかし、私が思う限り、あなたは再び同じグローバル変数を宣言しました

int geography() {}  function

したがって、これらのポインタの値を取得しようとすると、警告またはエラーが発生する可能性があります

だからこのように宣言する

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

そして、内部関数はchar *以前answer1などに使用しないでください

これらの変数を使用するだけです

また、リターンタイプの問題はgeography()ありintますが、あなたは入れていますchar*

于 2012-11-09T18:53:20.503 に答える