そもそも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も見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
【大喜利】看板の文字を埋めてください
旅行先でほぼ消えかけている看板に出会いました。 何を気を付ければいいのか穴埋めをして教えてください。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
【穴埋めお題】恐竜の新説
【大喜利】 考古学者が発表した衝撃の新説「恐竜は、意外にもそのほとんどが〇〇〇」 (〇〇〇に入る部分だけを回答して下さい)
-
プログラムの進行が一時ストップしません
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入力値が1以下、かつ数字以外の...
-
コンソールアプリの入力時に改...
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
C-Builderで数値(数字)以外を入...
-
物理の斜方投射のシミュレーシ...
-
batプログラム上で文字列を入力...
-
コマンドライン上で確定した文...
-
C言語 While文(ループ)内の...
-
Excel VBAで、Application.Inpu...
-
C言語・YesNo入力のループで解...
-
Eclipseでコマンドラインを入力...
-
至急教えてください。プログラ...
-
C++:cinが上手く使えない
-
正負を反転させて出力するプロ...
-
コマンドプロンプトからのEOFの...
-
*をユーザーが入力した数字の数...
-
EDITコントロールで入力できる...
-
2進数の1の数を数える問題
-
キーボード入力によるループの終了
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
コマンドプロンプトからのEOFの...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
cout関数を使っているのですが...
-
EDITコントロールで入力できる...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
getchar()について 教えてくだ...
-
if文の条件にscanf関数を使うと…?
-
漢字のソートについて
-
プログラミングの問題です 「金...
-
VB.NETで16進数+16進数や16進...
-
VisualStudio2019のコードアナ...
-
入力候補を表示させるには・・・?
-
実行結果の順番がおかしいんで...
おすすめ情報