2017-09-12 21 views
-3

6つの値(3つの文字列、3つの整数)を取り込み、それらの値を配列に格納し、それらの値のそれぞれを2の対で印刷する関数を作成しようとしています。配列に格納された値を出力する方法

ここで

私が持っているものです。

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    const int SIZE = 3; 
    int time[SIZE] = {};   
    string name[SIZE] = {};  

    for (int a = 0; a < 3; a++) 
    { 
     cout << "Enter runner name: "; 
     getline (cin, name[+1]);   
     cout << "Enter runner time: "; 
     cin >> time[+1]; 
     cin.ignore(); 
    } 

    for (int a = 0; a < 3; a++) 
    { 
     cout << name << " finished in " << time << "\n"; 
    } 
    return 0; 
} 

私は私の出力は次のようになりたいと思います:

name1 finished in time1 
name2 finished in time2 
name3 finished in time3 

現在、私の出力は次のようになります。

0x22fdf0 finished in 0x22fe10 
0x22fdf0 finished in 0x22fe10 
0x22fdf0 finished in 0x22fe10 

入力を配列に格納し、それらの値をユーザーに出力するにはどうすればよいですか?

これが既に回答済みの場合は、お詫び申し上げます。配列にユーザーの入力値が入力されてからディスプレイに戻される例は見つかりませんでした。

+3

'getlineの(CIN、名[1]);' - 親切にこれを行うことになっているもの状態? 'name [+1]とは何ですか?ループを使って配列を読み込む方法については、良いC++の本を見るのではなく、何を書くかを推測しているように見えます。 – PaulMcKenzie

答えて

1

実際に添字演算子[]を使用して配列のインデックスを作成する必要があります。同様に、印刷時には、配列内の要素のインデックスを作成する必要があります。配列自体を印刷しようとすると、コンパイラは暗黙的に配列をポインタに変換します。このポインタを印刷すると、要素自体ではなく、その配列の最初の要素のメモリアドレスが出力されます。

ですから、それぞれの最初の値を取得するために配列を間接参照できますが、より良い方法は、それはそうと同じように、あなたのforループでa変数によってインデックスにある:あなたが望んでいた場合、代わりに

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    const int SIZE = 3; 
    int time[SIZE] = {}; 
    string name[SIZE] = {}; 

    for (int a = 0; a < 3; a++) { 
     cout << "Enter runner name: "; 
     getline(cin, name[a]); 
     cout << "Enter runner time: "; 
     cin >> time[a]; 
     cin.ignore(); 
    } 

    for (int a = 0; a < 3; a++) { 
     cout << name[a] << " finished in " << time[a] << "\n"; 
    } 
    return 0; 
} 

ないインデックス、それをするには、あなたの独創的なアプローチを使用することができますが、その後、あなたは*間接参照演算子を使ってポインタを間接参照する必要があります:

for (int a = 0; a < 3; a++) { 
    cout << *name << " finished in " << *time<< "\n"; 
} 

しかし、今、あなたは、単に最初の要素を3回印刷します。

for (int a = 0; a < 3; a++) { 
    cout << *(name + a) << " finished in " << *(time + a)<< "\n"; 
} 

だから、いくつかのものは、ルックアップするために:だからこれを改善するために、あなたはいくつかのポインタ演算を採用し、で値を増やし、それぞれの元素、0、1、および最初の要素過去2を取得する必要があります:ポインタへの変換 *暗黙の配列を添字 * *をDereferncing

+1

提案:マジックナンバー3をキルしてください。for(int a = 0; a <3; a ++) 'を' for(int a = 0; a user4581301

関連する問題