2011-03-29 20 views
1

配列をこの関数に渡すときに、すべての種類のエラーが発生します。この関数は、ユーザーに名前とスコアを入力させ、2つの別々の配列(名前とスコアの1つ)に格納することを想定しています。私はポインタを使用する必要があると思うが、それらを使用する方法については考えていない。私は答えを望んでいない、ちょうど正しい方向へのプッシュ。ここにコードがあります:配列を関数に渡すのに問題がある

#include <iostream> 

int InputData(int &, char, int); 

using namespace std; 

int main() 
{ 
    char playerName[100][20]; 
    int score[100]; 
    int numPlayers = 0; 

    InputData(numPlayers, playerName, score); 
    return 0; 
} 

int InputData(int &numPlayers, char playerName[][20], int score[]) 
{ 
    while (numPlayers <= 100) 
    { 
     cout << "Enter Player Name (Q to quit): "; 
     cin.getline(playerName, 100, ‘\n’); 
     if ((playerName[numPlayers] = 'Q') || (playerName[numPlayers] = 'q')) 
     return 0; 
     cout << "Enter score for " << playerName[numPlayers] <<": "; 
     cin >> score[numPlayers]; 
     numPlayers++; 
    } 
} 

[OK]を私はいくつかの変更を加え、エラーが少なくなっている、閉じる必要があります、笑!

+0

私はこれを見て最後の15分を費やしました。あなたが何を正確にしようとしているのかよく分かりません。なぜplayerNameの多次元配列がありますか?あなたは1プレーヤーにつき1つのスコアしか記憶していませんか、あるいは各プレイヤーは複数のスコアを持つことができますか? – Pete

+0

フレーサー - 戻り値のタイプ 'main()'は** int ** – Mahesh

答えて

1

これは学校の割り当てのように見えますが、私は答えを求めないために拍手喝采します。これを行うにはいくつかの方法がありますが、使用しているアプローチではすでにかなり近いです。配列参照を渡すときは、配列の長さを含めたくありません。たとえば、パラメータint score[100]int score[]である必要があります。例外は、特にシナリオでは、多次元配列にあります。この場合、char playerName[][20]を使用します。関数の宣言もまた、一致するように変更する必要があります。 InputDataはintを返すことを忘れないでください。あなたの宣言と関数呼び出しは正しいです。関数のシグネチャを調整するだけです。

+0

でなければなりません。参照でnumPlayersも渡す必要があります。彼はスコアアレイを変更していますが、それらの変更を追跡するカウンタはありません。コードにはかなり間違いがあります。私は彼が質問を編集したり、いくつかの詳細を回答してくれることを願っています。 – Pete

+0

私はいくつかの変更を加えましたが、私は平凡です。 –

+0

Akridge自分の編集内容を確認できますか? –

1

脇のエラーを維持 -

InputData(numPlayers, playerName, score, size); 
             // ^^^^ size is no where declared 
             // resulting Undeclared indentifier error 

プロトタイプは3つの引数を取るが、4つのパラメータを渡す関数を呼び出すの言及。エラーに関する

ヒント:

  • アン1Dアレイが関数に渡しながら配列の最初の要素を指すポインタに減衰します。
  • 2D配列は、関数に渡されている間に1D配列を指すポインタ(すなわち、T [] [size])に減衰します。
  • main()の返品タイプは、である必要があります。

それはあなたがエラーのほとんどを修正与えられたヒントと思われます。しかし、プロトタイプを変更するのを忘れてしまった。だから、変更 -

int InputData(int &, char, int); 

int InputData(int &, char[][20], int[]); 

になぜあなたはプレイヤー名のstd::string配列を使用していませんか?それを使用して残りのエラーを取り除きます。がんばろう。

+0

サイズを忘れるのを忘れましたが、これで完了です。 –

+0

@Dave Fraser - これは宿題のように見えるので、ヒントがあれば解決できるはずです。もう一つのヒント: 'InputData(..)'のプロトタイプは定義引数と一致しません。 – Mahesh

+0

@ Mahesh私は関数に入るときにポインターに変換されることを理解しています。私の問題は配列の値をポインター変数に代入することです。これどうやってやるの? –

関連する問題