2011-01-11 11 views
0

これはおそらく簡単にわかりますが、何らかの理由でどこでも解決策を見つけることができません。おそらく、私は正しいことを探しているわけではありません。そして、それは私が見ていないいくつかの初心者のチュートリアルです。整数変数の値を取得

とにかく、私はC++で整数変数の値を取得する方法を知りましたか?文字列変数にはcin.getline()を使用できますが、整数変数を使用しようとしたときにエラーメッセージが表示されました(正当な理由で、間違っていることがわかりましたが、解決策を探していました)。

私のプロジェクトはWin32コンソールアプリケーションです。私がしようとしているのは、変数nに格納されている数字を入力するようユーザーに依頼することです。次に、nという値をとり、それにさまざまな数学関数を実行します。私のヘッダーファイルには、string,windows,iostreamstdiomath、およびfstreamがあります。別のライブラリを追加する必要がありますか?

EDIT:

cout << "TEST SINE"; 
cout << "\nPlease enter a number.\n\n"; 
cin >> n; 
break; 

ここで私が使用しようとしているコードです。これは私がする必要がありますか?もしそうなら、変数をどのように組み込んでsin、cos、tanを使ってテストできますか?

もう一度、ありがとうございます。

+0

利用floatまたはdoubleの代わりに、int型 –

+0

私はあなたに感謝、と認識を


ここでは、始めるためのサンプルプログラムです!私はそれを二重に変えるつもりだと思う。 – Abluescarab

答えて

5

これにはどのような問題がありますか?

cin>>n; 

数値演算関数の場合は、floatまたはdoubleが最適です。

int main() 
{ 
    double number; 
    double result; 

    cout<<"Enter a number:"<<endl; 
    cin>>number; 

    result = sin (number); //if you consider number is in radians 
    //result = sin(number*3.14159265/180.0) //if you consider number is in degrees  

    cout<<result; 

    return 0; 
} 
+0

おそらく何もないが、 'n'は' int n; 'で初期化されていると説明してください。 – milkypostman

+0

私はそれを使用していますが、文字列変数を取得するたびにcin.getline()を使用する必要があります。私はそれが整数の場合と同じ方法であると考えました。おそらく私は間違っている、私はちょうどこの問題(私が言ったように、私は愚かな感じ)に混乱している。私は私のコードで投稿を更新するつもりです。 – Abluescarab

+0

'cin.getline()'は改行文字にヒットするまで読み込みます。 'cin >> n'は空白が見えるまで読み込みます。したがって、ユーザが '10 20 30'を入力した場合、すべての入力を取得するために 'cin >> n'を3回実行する必要があります。しかし、 'cin.getline()'は文字列全体を取得します。これと同じ考え方に沿って、 'std:string s'を定義してから' cin >> s'を実行すると、 '' 10 "'しか得られません。 – milkypostman

3

あなたが整数をしたい場合は、あなたが使用することができます。

cin >> n; 

いますが、堅牢なアプリケーションをしたい場合、あなたはより良い入力データのコントロールを持っていました。

すでに文字列がatoi()またはstrtol()のような変換関数を呼び出す前に、すべての数字で構成されていることを検証し、その後、getline()で行う方法を知っているように、おそらく良いアイデアは、文字列として入力し、それになります。

このようにすれば、堅牢な入力と必要なデータ型を得ることができます。

しかし、三角関数を使用する場合は、整数ではなく、double型を使用する方がよいでしょう(atof())。以下に示す

#include <iostream> 
#include <cstdlib> 
#include <cmath> 
#include <cstring> 
using namespace std; 

int main (void) { 
    char s[256]; 

    // Get and check line. 

    cout << "Enter angle in degrees: "; 
    cin.getline(s,100); 
    for (char *ps = s; *ps != 0; ps++) { 
     if (!isdigit (*ps)) { 
      cout << "Not numeric" << endl; 
      return 1; 
     } 
    } 

    // Output string, float, sine and cosine (convert to radians first). 

    float f = atof (s); 
    cout << "String : '" << s << "'" << endl; 
    cout << "Float : " << f << endl; 
    f = f * 3.141592653589/180.0; 
    cout << "Sine : " << fixed << sin (f) << endl; 
    cout << "Cosine : " << fixed << cos (f) << endl; 

    return 0; 
} 

サンプルの実行:

Enter angle in degrees: 30 
String : '30' 
Float : 30 
Sine : 0.500000 
Cosine : 0.866025 

Enter angle in degrees: 45 
String : '45' 
Float : 45 
Sine : 0.707107 
Cosine : 0.707107 

Enter angle in degrees: 90 
String : '90' 
Float : 90 
Sine : 1.000000 
Cosine : -0.000000  (caused by floating point inaccuaracy). 
+0

おっと、私は@あなたに返信するつもりだった。あなたは私にアイデアをくれましたが、stdネームスペースにはgetl​​ine()関数がありません。 – Abluescarab

+0

@Abluescarab:そのショットを1つ与えてください。私は簡単にするためにそれを修正しました。 – paxdiablo

+0

ありがとう、問題と遅れた返事のために申し訳ありません! – Abluescarab

関連する問題