標準入力から入力する場合は「cin」を利用します。このcinも型によって自動的に
数字を入力したり、文字列を入力したりすることができます。
型
| 入力形式
|
char |
1文字として入力 |
bool |
入力不可 |
int short long |
整数として入力 |
float double |
小数として入力 |
char* |
文字列(単語)として入力(スペースなどは削除される) |
その他のポインタ |
入力不可 |
#include <iostream>
using namespace std;
void main(){
cout << "あなたの名字は? : " << flush;
char last_name[512];
cin >> last_name;
cout << "あなたの名前は? : " << flush;
char first_name[512];
cin >> first_name;
cout << "あなたの年齢は? : " << flush;
int age;
cin >> age;
cout << endl;
cout << "氏名 : " << last_name << ' ' << first_name << endl
<< "年齢 : " << age << endl;
}
|
あなたの名字は? : Hirosue
あなたの名前は? : Ryoko
あなたの年齢は? : 20
氏名 : Hirosue Ryoko
年齢 : 20
|
char*(char配列)の場合は、単語単位で読まれます。つまり「Hirosue Ryoko」と
入力すると、変数last_nameに「Hirosue Ryoko」と代入されるのではなく、
last_nameには「Hirosue」、first_nameには「Ryoko」と入力されることになります。
では、1行そのまま入力したい場合はどうすれば良いのでしょうか。
「>>」を利用して1行読み込むことはできません。関数を利用します。
cinはistremクラスのオブジェクト(インスタンス)です。したがって、istreamクラスの
メンバー関数(getline)を利用します。getline関数は、引数にcharポインタと、バッファーサイズ
を渡します。つまり以下のように使用します。
#include <iostream>
void main(){
char line[512];
cout << "なんか入力して" << endl;
cin.getline( line, sizeof(line) );
cout << line << endl;
}
|
なんか入力して
This is a pen.
This is a pen.
|
実は、「>>」を利用して読み込んだ場合も、「getline」を利用して読み込んだ場合も
戻り値が帰ってきます。つまり以下のような使い方も可能です。
#include <iostream>
void main(){
char line[512];
cout << "なんか入力して。終了はCTRL + Zを押して" << endl;
while(cin.getline( line, sizeof(line) ) )
cout << line << endl;
}
|
なんか入力して。終了はCTRL + Zを押して
This is a pen.
This is a pen.
I have a book.
I have a book.
I love you.
I love you.
|