2017-04-21 16 views
0

私は、ユーザーの入力によって値を初期化する必要がある人物の詳細を格納する単純な構造を持っています。次のような構造は、次のとおりです。それぞれの値が入力された後、私は、各Runnerの値を格納するcinを使用しますが、入力を取ることを希望していますcinを使用して複数の入力を空白で入力する

typedef struct { 

     char name[20]; 
     int age; 
     char address[50]; 
     char vehicle[10]; 
}Runner; 

enter keyを使用して(つまり、間に空白文字を含んでいてもよいです)。以下は

はコードです:

Runner run1; 

     cout << "Enter name age address vehicle (pressing enter at each instance)" << endl; 
     cin >> run1.name >> run1.age >> run1.address >> run1.vehicle ; 

スペースで区切られた値は、2つのユニークなエントリとしてみなされるであろうことは極めて明白です。

Enterキーを押した後で、白いスペースとcinをスキップするにはどうすればいいですか?このような状況に別のアプローチがある場合でも、同じことを知ることは素晴らしいことです。

+1

ランナーの各メンバーに 'std :: getline'を使用してください。 –

+0

@GillBatesだから私はこの質問に尋ねられたようにこれを1行で行えないと思いますか? –

答えて

1

入力には空白が含まれる可能性があるため、getline関数を使用してください。

cin.getline(run1.name,20); 
cin.getline(run1.address,50); 
cin.getline(run1.vehicle,10); 
cin >> age 

名前の価値を取った後に年齢の価値を取りたい場合は、このようなことをする必要があります。

cin.getline(run1.name,20); 
cin >> run1.age; 
cin.getline(dummy,5); //cin leaves a newline at the buffer. This line of code takes the newline from the buffer. 
cin.getline(run1.address,50); 
cin.getline(run1.vehicle,10); 
+0

コードで使用している「ダミー」のことについてもっと説明してください。 –

+1

はい。 cinはコンソールから入力を受け取ります。しかし、バッファに改行 '\ n'を残します。改行文字が見つかるまでバッファからgetlineを読み込みます。したがって、cinの直後にgetlineを使用すると、最初のcinが改行を残してからgetlineが改行まで読み込まれます(したがって、基本的にgetlineは空の文字列を読み込みます)。したがって、行cin.getline(dummy、5)を削除すると、run1.adressは空の文字列を保持します。したがって、バッファから改行を削除するには、ダミーは改行文字を取り、run1.addressは正しい値を持ちます。 –

+0

詳しくはこちら http://stackoverflow.com/questions/5739937/using-getlinecin-s-after-cin Loki Askariのコメント –

1
cin.getline (name,20); 
cin.getline (address,50); 
cin.getline (vehicle,10); 
cin >> age; 
関連する問題