2012-05-05 15 views
1

私はこのコードを書いている間に別の問題に遭遇しましたが(プログラマーから多大な助けを借りて)、正しい値を出力するプログラムに問題があります。 beadArrayTopは、出力何かがこのように見えるはずです。配列から特定の値を出力して正しい値を取得

4 * 4 * 4 * 4 * 4 * 4 * 

ではなく、それはそれを出力し、唯一の0の4者があるべき場所に。

beadArrayBottomはほとんど同じことをします。私は、関数printArrayをbeadArrayTopとbeadArrayBottomの前に置いてみました。さらに、beadArrayTopとbeadArrayBottomをprintArrayの中に入れましたが、役に立たなかった。私の出力を正しくするために何をすべきかについてのヒント?ここでは、コードは次のようになります。

#include <iostream> 
#include <iomanip> 



using namespace std; 

const int MAX = 14; 
void line (int &cycleCounter, int &starCounter); //outputs a star followed by six spaces 
void solidLine(); //outputs a solid line of stars 
void smallerLine(); //ouputs a smaller line of stars 
void board(); //outputs the mancala board, with numbers indicating the bins. 
void binNumbersTop(); //outputs numbers indicating the bin # (Top only). 
void binNumbersBottom(); //outputs numbers indicating the bin # (Bottom only). 
void beadArrayTop(); //outputs the array for the top. 
void beadArrayBottom(); //outputs the array for the bottom. 
void beadArrayMiddle(); //outputs the array for the end bins. 
void startArray (int beadArray [MAX]); //Creates an array of 14, with 4 in every slot except for 6 and 13. 
void printArray(); //Outputs the array mentioned above 
int beadArray[MAX]; 



int main() 

{ 





    board(); 
    cout<<endl; 












    cout<<endl; 
    system("pause"); 
    return 0; 




} 


//**********************************************// 
void line() 
{ 
    int cycleCounter = 9; 
    int starCounter = 6; 

    while (cycleCounter > 0) 
    { 
     cout<<"*"; 


     int spaceCounter = 1; 

     while (spaceCounter > 0) 
     { 
      cout<<"  "; 
      spaceCounter = spaceCounter - 1; 
      starCounter = starCounter - 1; 
      cycleCounter = cycleCounter - 1; 
     } 
    } 
} 

//************************************************// 
void solidLine() 

{ 
    int loopCounter; 
    loopCounter = 57; 

    while (loopCounter > 0) 
    { 
     cout<<"*"; 
     loopCounter = loopCounter - 1; 
    } 

} 
//************************************************// 
void smallerLine() 
{ 
    int loopCounterTwo; 
    loopCounterTwo = 43; 
    cout<<"* 13 "; 
    while (loopCounterTwo > 0) 
    { 
     cout<<"*"; 
     loopCounterTwo = loopCounterTwo - 1; 
    } 
    cout<<" 6 *"; 
} 
//************************************************// 
void binNumbersTop() 
{ 
    cout<<"*"; 
    int topNumbers = 1; 
    cout << setw (7)<<"*"; 
    cout <<setw (4)<< 0; 
    cout << setw (3)<<"*"; 

    while (topNumbers < 6) 
    { 
     cout <<setw (4)<< topNumbers; 
     cout <<setw (3)<<"*"; 
     topNumbers = topNumbers + 1; 
    } 

    cout << setw (7)<<"*"<<endl; 

} 


//**********************************************// 
void binNumbersBottom() 
{ 
    cout<<"*"; 
    int bottomNumbers = 11; 
    cout << setw (7)<<"*"; 
    cout <<setw (4)<< 12; 
    cout << setw (3)<<"*"; 

    while (bottomNumbers >= 7) 
    { 
     cout <<setw (4)<< bottomNumbers; 
     cout <<setw (3)<<"*"; 
     bottomNumbers = bottomNumbers - 1; 
    } 

    cout << setw (7)<<"*"<<endl; 

} 

//**********************************************// 

void beadArrayTop() 
{ 

    cout<<"*"; 
    cout <<setw (7)<<"*"; 
    cout <<setw (4) <<beadArray[0]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[1]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[2]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[3]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[4]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[5]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (7) <<"*"; 

} 
//***********************************************// 
void beadArrayBottom() 
{ 

    cout<<"*"; 
    cout <<setw (4)<<beadArray[13]; 
    cout <<setw (3)<<"*"; 
    cout <<setw (4) <<beadArray[12]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[11]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[10]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[9]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[8]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[7]; 
    cout <<setw (3) <<"*"; 
    cout <<setw (4) <<beadArray[6]; 
    cout<< setw (3) <<"*"; 

} 
//***********************************************// 

void board() 
{ 



solidLine(); 
cout<<endl; 


line(); 
cout<<endl; 



binNumbersTop(); 


line(); 
cout<<endl; 
beadArrayTop(); 

cout<<endl; 
line(); 
cout<<endl; 


smallerLine(); 
cout<<endl; 
line(); 
cout<<endl; 


binNumbersBottom(); 


line(); 
cout<<endl; 
beadArrayBottom(); 
cout<<endl; 
line(); 
cout<<endl; 





solidLine(); 
cout<<endl; 


} 

//*********************************************// 

void startArray (int beadArray[MAX]) 
{ 
    for(int i=0; i<MAX; ++i) 
    { 
     beadArray[i]=4; 
    } 
    beadArray[6]=0; 
    beadArray[13]=0; 
} 
//*********************************************// 
void printArray() 
{ 
    startArray (beadArray); 
    for(int i=0; i<MAX; i++) 
    cout << beadArray[i]; 
    cout<<endl<<endl; 
} 
//*********************************************// 

答えて

3

あなたはshadowing the variablebeadArrayです:

void printArray() 
{ 
    int beadArray[MAX]; 
    startArray (beadArray); 

、グローバル値がスコープになり、ここでint beadArray[MAX]宣言を削除して、あなたの代わりにそれを修正します。

通常、コンパイラはこれについて警告します。あなたのコンパイラがこれについて警告していない場合は、警告を出してください。 (他の人がさらに警告を上げたいのにgccために、私は、-Wall -Wextraが好き。これが良い最小値である。)

+0

私はint beadArray [MAX]を取り出しました。しかし、私は配列を出力するときに私はまだ0を取得します。 – chrisvx930

+0

私はすべてのコードを書いたので、ここで何が起こるかを見ることができます。 – chrisvx930

+0

'printArray()'から呼び出された関数で配列の内容を変更していると、非常に奇妙に思えるかもしれません。おそらく 'initializeAndPrintArray()'などの名前を付けるべきでしょうか? (_Why_あなたはそれを印刷するときに配列を初期化しますか?それは配列の効用と印刷機能をいくらか制限します...) – sarnold

3

あなたの問題はあなたが二つの配列、スタック上に1つずつグローバル配列を作成しているということです。

int beadArray[MAX]; 

void printArray() 
{ 
    int beadArray[MAX]; 
    startArray (beadArray); 

    ... 
} 

あなたがstartArrayを呼び出すと、それはプリントアレイのスコープでグローバルな配列をシャドウするので、それは地元のbeadArrayを使用しています。

今後このようなミスを避けるために、リファレンスについて学び、可能な限り変数の範囲を制限することができます。

関連する問題