2017-03-11 16 views
0

私は、main関数に見られるように、2次元の整数配列を持っています。プログラムは、ユーザーに単一の整数を要求する必要があります。次に、main関数に見られるように、 'addValue'関数を使用して、2D配列の各値にユーザーの値を追加する必要があります。配列から値を追加してスペースを挿入

次に、 'print'関数を書いて、配列の各行をその行に印刷し、各行の各番号を1つの空白で区切って出力します。

注:各行の最後の数字の後に空白を表示しないでください。

例:

Input: 
2 

Output: 

7 6 

25 1 

私が持っている問題は、私は、出力のスペースを持って正確に必要があるということですが、私は、特定の入力値のためにそれを取得します。

4 3 

22-2  <- Notice that there is not an space. 

は、誰かが私はそれを修正する助けてもらえ:たとえば入力は、私が 出力を得る-1あるとき。 2つの文字の最小間隔と感謝

#include <iostream> 
#include<iomanip> 

using namespace std; 

void addValue(int my_array[][2],int value) 
{ 
    for(int i=0;i<2;i++) 
    { 
     for(int j=0;j<2;j++) 
     { 
      my_array[i][j]=my_array[i][j]+value; 
     } 
    } 
} 
void print(int my_array[][2]) 
{ 
    for(int i=0;i<2;i++) 
    { 
     for(int j=0;j<2;j++) 
     { 
     cout<<setw(2)<<my_array[i][j]; 
    } 
     cout<<endl; 
    } 
} 

int main() 
{ 
    int my_array[2][2] = {{5,4},{23,-1}}; 

    int value; 
    cin >> value; 

    addValue(my_array, value); 

    print(my_array); 

    return 0; 
} 
+0

数字は常に2桁以下になりますか?もしそうでなければ、あなたの問題はスペースだけでなく、 'setw()'コールの '2'である。 – PaulMcKenzie

答えて

1
cout<<setw(2)<<my_array[i][j]; 

出力my_array[i][j]。あなたが表示するように2文字以上の文字を取る価値がある場合は...ここにも例です:サンプルコードでそう

std::cout << std::setw(1) << 42 << std::setw(2) << 42 << std::setw(3) << 42 << std::endl; 

出力

4242 42 

23が2つの文字を取り、-1取り2文字。彼らは一緒に砕かれ、23-1になります。

フォーススペース

cout<<setw(2)<<my_array[i][j] << ' '; 

この缶台無し列の間隔および行ルールの末尾にはスペースを壊していないので、他の選択肢ことを確認することです:ソリューションは

setwに渡された数値は、何があっても間隔を維持するのに十分な大きさです。

cout<<setw(100)<<my_array[i][j]; 

OK、その100は過剰ですが、あなたはポイントを得る。スペースを最初に置くこともできます。

cout<<setw(2)<<' ' << my_array[i][j]; 

ルールはありません。さらに別のオプションは、前のスペースを持つ要素の残りの部分を印刷し、その後、forループを保持する任意の装飾なしで最初の要素を印刷する必要がある場合は、内側forループで

cout << my_array[i][0] << ' ' << my_array[i][1]; 

を気にしないことです。

for(int i=0;i<2;i++) 
{ 
    cout<< my_array[i][0]; 
    for(int j=1;j<2;j++) 
    { 
     cout<< ' ' <<my_array[i][j]; 
    } 
    cout<<endl; 
} 

関連する問題