2011-01-11 8 views
0

이것은 쉽게 알아낼 수 있지만 어떤 이유로 든 솔루션을 찾을 수 없습니다. 아마도 나는 옳은 일을 찾고있는 것이 아닙니다. 그리고 아마 내가 본 적이없는 초보 자습서에있을 수도 있습니다.정수 변수의 값 검색

어쨌든 C++에서 정수 변수의 값을 검색하는 방법이 궁금합니다. 문자열 변수에 cin.getline()을 사용할 수는 있지만 정수 변수로 시도했을 때 오류 메시지가 나타났습니다. (그리고 올바르지 만, 그것이 잘못되었다는 것을 알았지 만 해결책을 찾고있었습니다).

내 프로젝트는 Win32 콘솔 응용 프로그램입니다. 내가하려는 것은 변수 n에 저장된 숫자를 사용자가 입력하도록 요청하는 것입니다. 그런 다음 n 값을 가져 와서 다양한 수학 함수를 수행합니다. 내 헤더 파일에는 string, windows, iostream, stdio, mathfstream이 있습니다. 다른 라이브러리를 추가해야합니까?

편집 :

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

여기 내가 사용하려고 해요 코드입니다. 이 모든 것이 내가 할 일인가요? 그렇다면 변수를 통합하여 sin, cos 및 tan을 사용하여 테스트 할 수있는 방법은 무엇입니까?

다시 한번 감사드립니다.

+0

사용 플로트 대신 난 그냥, 감사 것을 깨달았다 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'을 세 번하여 모든 입력을 검색해야합니다. 그러나,'cin.getline()'은 전체 문자열을 검색 할 것이다. 이 같은 생각의 기차를 따라'std : string s'을 정의한 다음'cin >> s'을하면''10 "'만 얻을 것입니다. – milkypostman

3

, 당신은 사용할 수 있습니다

cin >> n; 

하지만 당신은 더 나은했다 당신이 강력한 응용 프로그램을 원하는 경우 입력 데이터의 제어 할 수 있습니다. 이미 다음 문자열이 atoi() 또는 strtol() 같은 변환 함수를 호출하기 전에 모든 숫자로 구성되어 있음을 확인, getline()으로 수행하는 방법을 알고

아마도 더 나은 아이디어 문자열로 입력을하는 것입니다.

그런 식으로 강건한 입력과 원하는 데이터 유형을 얻을 수 있습니다.

그러나 삼각 함수를 사용하려면 정수가 아닌 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 네임 스페이스는 getline() 함수를 가지고 있지 않다고 말한다. – Abluescarab

+0

@Abluescarab : 그 중 하나를 줘. 나는 그것을 더 간단하게하기 위해 그것을 수정했다. – paxdiablo

+0

고맙습니다, 문제와 늦은 답변에 대해 사과드립니다! – Abluescarab