
そもそも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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
java初心者です。入力されたの...
-
*をユーザーが入力した数字の数...
-
C言語でつるかめ算をするにはど...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
プログラミング初心者です。 Py...
-
if文で困っています。
-
UWSCで変数をキー入力
-
scanfが2回使えない・・・?;
-
Excel VBAで、Application.Inpu...
-
batプログラム上で文字列を入力...
-
scanfについて
-
scanfの入力をgets関数で読み捨...
-
C言語におけるfgetsを用いたル...
-
Userformの入力順序をタブオー...
-
if文の条件にscanf関数を使うと…?
-
cout関数を使っているのですが...
-
入力値が1以下、かつ数字以外の...
-
C言語の勉強しています。すみま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報