データの入力
cinを用いると、データの入力が可能となります。cin>>変数によって、
変数内に入力されたデータを格納することが出来ます。
#include <iostream>
using namespace std;
int main(){
int hogehoge;
cout <<"整数を入力してください\n";
cin >> hogehoge;
cout <<"入力データは"<<hogehoge<<"ですね\n";
}
実行結果は以下の通りです。
整数を入力してください
4
入力データは4ですね
上記プログラムを応用すると様々なプログラムを作ることが出来ます。
例えば、階乗を求めるプログラムはどのようにすれば良いでしょか?
(この段階では未だ使用していない関数が出てきますが・・・)
#include <iostream>
using namespace std;
int main(){
int hogehoge;
cout <<"整数を入力してください\n";
cin >> hogehoge;
//階乗を求める
int i=1,sum=1;
//入力された分の掛け算を繰り返す
for(i=1;i<=hogehoge;i++){
sum = sum * i;
}
cout <<"階乗結果は"<<sum<<"です\n";
実行結果は以下の通りです。
整数を入力してください
5
階乗結果は120です
階乗は例えば5の階乗だと5*4*3*2*1ですので、5が入力されると1〜5までを掛け算すればよいことになります。
ここでforが使用されていますが、forは指定された分繰り返す(後述します)意味ですので1から5までを繰り返して、
それぞれの値を掛けていけば5の階乗が求められるということになります。
しかし・・・実際に入力されたデータが本当に意図されたデータなのか?というと疑問が残ります。
整数と整数を入力して欲しいのに整数ではなくて文字列を送ってこられたりしたら・・・と懸念事項が残ります。ここで
本当に整数かどうかをチェックする必要があります。
そこでcinのエラーを検出するには!cinを用います。!cinを用いるとエラー時に検出してくれるようになります。その!cinを
ifやwhileでエラー処理を抽出すれば本当に整数かどうかを調べることが出来ます。
エラー時には再入力して欲しいのでwhileで正しい値が入力されるまで入力を促すことにしましょう。
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int main(){
int a;
cout << "整数を入力してください!:" ;
cin >> a;
while(!cin){
//cinのエラーフラグをリセットする
cin.clear();
//cinの入力バッファの文字分をリセットする
cin.ignore(INT_MAX,'\n');
cout << "入力値が間違っています!正しい値を入力して下さい!:";
cin >> a;
}
}
上記プログラムでは、エラーが発生したcinの内部には、エラーフラグが残りっぱなしなのでclearで取り除く必要があります。
また、ignoreでは、入力されたcinの値を除去する必要があります。そこでignoreの第一引数に整数の最大値(INT_MAXを使います)を消去し、第二引数で
改行までの値を消去する。例えば入力データが99999だとすると実際は改行で\nまで入るので99999\nになります。第一引数で
99999を消去し第二引数で\nまでを削除することになります。
プログラムでは、INT_MAX1を使うために、limitsヘッダを読み込んでいます。