|
分類:[C/C++]
最近プログラミングを始めたばかりです。
「C/C++プログラミング初心者講座」さんを参考に、下のようなプログラムを書いてみました。
大体は想定通りいくのですが、初めのところで数値以外を入力すると無限ループができてしまいます。
意図としては、1,2,3以外を入力したら数値、文字にかかわらず「1 または 2 のいずれかを入力してください。」と出るようにしたいのですが・・・。
数値と文字の区別がイマイチできていません。
具体的にはどうすべきなのでしょうか?
ご教授お願いします。
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int main()
{
// 動作の選択
int select;
double a,b,c;
do{
cout << "求めたいものを数字で選択してください。" <<endl;
cout << "1. 三角形の面積" <<endl;
cout << "2. 2次方程式の解" <<endl;
cout << "3. 終了" <<endl;
cout << "選択:";
cin >> select;
if(select==1)
{
// 三角形の面積
cout << "求めたい三角形ABCの三辺a,b,cの値を入力してください。" <<endl;
cout << "a="; cin >> a;
cout << "b="; cin >> b;
cout << "c="; cin >> c;
if(fabs(a-b)<c && c<(a+b))
{
double cos,sin;
cos = (a*a + b*b - c*c) / (2*a*b);
sin = fabs(sqrt(1-cos*cos));
double s;
s = a * b * sin /2;
cout << "3辺の長さが" << a << "," << b << "," << c;
cout << "である三角形の面積は" << s << "である。" ;
}
else
{
cout << "そのような三角形は存在しません。";
}
}
else
{
if(select==2)
{
//2次方程式の解
cout << "2次方程式 ax^2+bx+c=0 の定数a,b,cの値を入力してください。" <<endl;
cout << "a="; cin >> a;
cout << "b="; cin >> b;
cout << "c="; cin >> c;
double d,r,kai1,kai2;
d = b*b-4*a*c;
cout << "2次方程式 "; if(a==1){;}else{cout<<a;} cout <<"x^2" ;
cout.setf(ios::showpos);
if(b==1){;}else{if(b==-1){cout<<"-";}else{cout<<b;}}
cout << "x" << c << "=0 の実数解は、";
cout.unsetf(ios::showpos);
if(d<0)
{
cout << "解なし である。";
}
else
{
r = sqrt(d);
kai1=(-b-r)/(2*a);
kai2=(-b+r)/(2*a);
if(d==0)
cout << "x=" << kai1 << "(重解)である。";
else
cout << "x=" << kai1 << " , " << kai2 << "である。";
}
}
else
{
cout << "1 または 2 のいずれかを入力してください。";
}
}
cout << endl << endl;
}while(select != 3);
}
|