2011-01-11 22 views
0

Dies ist wahrscheinlich leicht zu finden, aber ich kann nirgends eine Lösung finden, aus irgendeinem Grund. Vielleicht suche ich nicht das Richtige. Und vielleicht ist es in einem Anfänger-Tutorial, das ich nicht gesehen habe.Abrufen des Werts einer Ganzzahlvariablen

Wie auch immer, ich fragte mich, wie man den Wert einer Integer-Variable in C++ abrufen kann? Ich weiß, dass Sie cin.getline() für String-Variablen verwenden können, aber ich erhielt eine Fehlermeldung, wenn ich das mit einer Integer-Variable versuchte (und zu Recht, ich weiß, dass es falsch war, aber ich suchte nach einer Lösung).

Mein Projekt ist eine Win32-Konsolenanwendung. Was ich versuche ist, einen Benutzer aufzufordern, eine Nummer einzugeben, die in der Variablen n gespeichert ist. Dann nehme ich den Wert n und führe verschiedene mathematische Funktionen damit aus. In meiner Header-Datei habe ich string, windows, iostream, stdio, math und fstream. Muss ich eine andere Bibliothek hinzufügen?

EDIT:

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

Hier ist der Code, den ich zu verwenden ist versucht. Ist das alles was ich tun muss? Wenn ja, wie integriere ich die Variable, damit ich sie mit sin, cos und tan testen kann?

Noch einmal, vielen Dank im Voraus.

+0

Verwendung float oder double statt int –

+0

ich, dass gerade realisiert, danke! Ich denke, ich werde es zu einem Doppel ändern. – Abluescarab

Antwort

5

Was ist das Problem damit?

cin>>n; 

Für mathematische Funktionen wäre float oder double die bessere Option.

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

wahrscheinlich nichts, aber Sie sollten erklären, dass 'n' mit' int n; 'initialisiert wird. – milkypostman

+0

Ich benutze das, aber immer wenn ich eine String-Variable abrufe, muss ich cin.getline() verwenden.Ich dachte mir, dass es bei Ganzzahlen genauso wäre. Vielleicht liege ich falsch, ich bin nur ein wenig verwirrt in diesem Thema (wie gesagt, ich fühle mich dumm). Ich werde den Post mit meinem Code aktualisieren. – Abluescarab

+0

'cin.getline()' liest, bis es ein Zeilenumbruchzeichen trifft. 'cin >> n' liest, bis es Whitespace sieht. Wenn der Benutzer also "10 20 30" eingibt, müssen Sie dreimal "cin >> n" eingeben, um alle Eingaben abzurufen. 'Cin.getline()' würde jedoch die gesamte Zeichenfolge abrufen. Entlang diesem Gedankengang würden Sie, wenn Sie 'std: string s' und dann' cin >> s' definieren würden, nur "10" bekommen. – milkypostman

3

Wenn Sie eine ganze Zahl möchten, können Sie verwenden:

cin >> n; 

aber man hatte eine bessere Kontrolle der Eingabedaten haben, wenn Sie eine robuste Anwendung möchten.

Vielleicht eine bessere Idee wäre es als Zeichenfolge eingegeben werden, wie Sie bereits wissen, wie mit getline() zu tun, dann bestätigen, dass die Zeichenfolge aller numerischen Zeichen besteht, bevor eine Konvertierungsfunktion wie atoi() oder strtol() aufrufen.

Auf diese Weise erhalten Sie robuste Eingabe plus die Datentypen, die Sie möchten.

Aber, wenn Sie trigonometrische Funktionen verwenden möchten, sind Sie wahrscheinlich besser dran mit Doppelbetten, mit atof(), anstatt Ganzzahlen zu arbeiten.


Hier ist ein Beispielprogramm für den Einstieg:

#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; 
} 

Probe läuft weiter unten:

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

Whoops, ich wollte dir antworten. Sie haben mir eine Idee gegeben, aber es besagt, dass der std-Namespace keine getline() -Funktion hat. – Abluescarab

+0

@Abluescarab: gib dem einen Schuss. Ich habe es modifiziert, um es einfacher zu machen. – paxdiablo

+0

Vielen Dank, Entschuldigung für den Ärger und die späte Antwort! – Abluescarab

Verwandte Themen