
そもそもcinについてあまり詳しい事は知らないのですが
よろしくおねがいします。
cinを使って整数を取りこもうとする時、数字以外が
入ってしまうとおかしな動作をします。
例えば「10未満の整数値を取りこむまで続くループ」で
入力部分を作ろうとした時に、
while(1){
cout << "入力してください" << endl;
cin >> int_a;
if(int_a < 10) break;
}
大体 以上の様に書くと、入力する時にアルファベットが
入ってしまうと
入力して下さい
入力して下さい
…(エンドレス)…
入力して下さい
となってしまいます。cinをあきらめてscanfにしてみると
今度は実行時エラーがでてしまいます。
整数を入力する事が出来て、なおかつアルファベットが
入力されても' 'で囲った値が入るようにするには
どのようにすればよいでしょうか?
No.3ベストアンサー
- 回答日時:
失礼しました
1でしているような
エラーのクリアとデータの破棄を忘れていました
#include <iostream>
using namespace std;
void main(void)
{
int int_a;
while(true)
{
cout << "入力してください" << endl;
cin >> int_a;
if(cin.good()==0)
{
cout<<"変なものを入力しないでください"<<endl;
cin.clear();
cin.seekg(0);
break;
}
cout<<int_a<<"が入力されました"<<endl<<endl;
if(int_a < 10) break;
}
}
この回答への補足
入力のチェックやデータの破棄に使ってるメンバ関数(言葉あってます?)
が1とは異なりますが、同じ動作が得られるものなのか
それとも処理系による差なのか自分の知識では及びませんが
そこは調べてみようと思います。
No.5
- 回答日時:
アルファベットが入力されても' 'で囲った値が入るようにするにはどのようにすればよいでしょうか?
//gomi29.cpp
#include <iostream>
#include <string>
using namespace std;
void main(void)
{
intint_a;
while(true)
{
stringstr_a;
cout << "入力してください:";
cin >> str_a;
if(cin.good()==0)
{
cout<<"変なものを受信"<<endl<<endl;
cin.clear();cin.seekg(0);
}
else
{
cout<<str_a<<"を受信"<<endl;
if(str_a=="quit")break;
int_a=
atoi(str_a.substr(str_a.find('\'')+1).c_str());
int_a++;
cout<<"入力+1="<<int_a<<endl<<endl;
}
}
}
//結果
C:borland>gomi29
入力してください:3
3を受信
入力+1=4
入力してください:abc'3'd
abc'3'dを受信
入力+1=4
入力してください:abc
abcを受信
入力+1=1
入力してください:abc'd'e
abc'd'eを受信
入力+1=1
入力してください:quit
quitを受信
入力+1=1
C:borland>
//数字が無い場合にはatoiは0を出力
No.4
- 回答日時:
#include <iostream>
#include <string>
using namespace std;
void main(void)
{
while(true)
{
stringstr_a;
cout << "入力してください:";
cin >> str_a;
if(cin.good()==0)
{
cout<<"変なものを受信"<<endl<<endl;
cin.clear();cin.seekg(0);
}
else
{
cout<<str_a<<"を受信"<<endl<<endl;
if(str_a=="quit")break;
}
}
}
とすれば数字でも文字でも取り込めます
整数型にするにはatoiを使えばいいでしょう
No.2
- 回答日時:
#include <iostream>
using namespace std;
void main(void)
{
intint_a;
while(1)
{
cout << "入力してください" << endl;
cin >> int_a;
if(cin.good()==0)
{
cout<<"変なものを入力しないでください"<<endl;
break;
}
cout<<int_a<<"が入力されました"<<endl<<endl;
if(int_a < 10) break;
}
}
No.1
- 回答日時:
while( 1 )
{
std::cout
<< "入力してください"
<< std::endl;
std::cin
>> iGotData;
if( !std::cin.fail() ) // 整数値が入力されました。
break; //ループから抜けます。
// 整数値以外が入力されました。
std::cin.clear(); // エラーをリセットします。
std::cin.ignore( 1024, '\n' ); // 文字列を破棄します。
}
というような判定部分を入れてやればいいのでは?
早速の回答をありがとうございます。cinにも色々な
関数が用意されてるのですねぇ。それらの仕様もあれば
言う事なしなのですが、そういうのが載ってるページは
ありそうなので探してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C++で空Enterの入力を判断したい!!
C言語・C++・C#
-
cout関数を使っているのですが,画面に出力されません。
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
4
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
5
空ENTERの判別
C言語・C++・C#
-
6
構造体の中の構造体
C言語・C++・C#
-
7
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
8
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
9
stringの最大サイズ
C言語・C++・C#
-
10
char*を初期化したいのですが
C言語・C++・C#
-
11
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
12
C言語 配列の長さの上限
C言語・C++・C#
-
13
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
-
14
複数のクラスで共通した関数を使いたい場合
C言語・C++・C#
-
15
デバッグとビルドは何が違うのですか?
Visual Basic(VBA)
-
16
C++ コマンドプロンプトでの入力の受付と表示
C言語・C++・C#
-
17
C言語において、 配列要素をひとつずつ前にずらすコード
C言語・C++・C#
-
18
c++ 文字列を入力して、一文字ずつ表示させる関数を作りたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
正負を反転させて出力するプロ...
-
5
java初心者です。入力されたの...
-
6
4桁の数字以外を入力したらエラ...
-
7
プログラムC言語の整数の約数に...
-
8
IF文で戻ることはできますか?...
-
9
batプログラム上で文字列を入力...
-
10
cout関数を使っているのですが...
-
11
あるキーを押したら強制終了さ...
-
12
エクセル¥マクロで対話形式の...
-
13
C言語の整数の判別
-
14
小数か整数かを判定する方法
-
15
getcharをしながらwhile文で出...
-
16
EDITコントロールで入力できる...
-
17
漢字のソートについて
-
18
if文の条件にscanf関数を使うと…?
-
19
C言語について
-
20
javaで入力を促すメッセージの...
おすすめ情報
公式facebook
公式twitter