2013-08-24 9 views
0

저는 C++을 처음 사용 했으므로 문자열 변수를 숫자로 변환하는 데 도움이 필요합니다. 나는 그 사람의 나이와 그녀의 내년 나이를 화면에 인쇄해야하지만 어떻게되는지 알아 내지 못합니다. 문자열을 사용하여 수학을 할 수 없습니다. 그럼 제발 몇 가지 예를 쏴주세요.C++에서 atof()를 사용하여 문자열을 부동으로 변환

//converts F to C 
    ctemp=(ftemp-32)*5.0/9.0; 

    //calculates age 
    age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str()); 


    cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.\n"<<"Its "<<ftemp<<" in "<<city<<"--- That's "<<setprecision(2)<<ctemp<<" degrees C"<<endl; 

편집 :

int main() { 
    int city; 
    double ftemp, ctemp,age,age2; 
    string buf,name; //Ask user to enter age, name, temperature and city 
    cout<<"Enter your age\n"; 
    cin>>buf; 
    age = atof(buf.c_str()); 
    cout<<"Enter your full name please\n"; 
    getline(cin,name); 
    cout<<"Enter the outside temperature please\n"; 
    cin>>buf; 
    ftemp=atof(buf.c_str()); 
    cout<<"Enter the current city you are in\n"; 
    cin>>buf; 
    city=atoi(buf.c_str()); 
} 
+0

어디에서 값을 가져 옵니까? –

+4

'std :: stof'를 사용하십시오. 그것은 에러 검사를 가지며 불필요한'c_str()'호출을 요구하지 않는다. – chris

+1

이 변수가 어떻게 선언되는지, 값이 어디서 오는가? – WhozCraig

답변

1
데이터를 입력하는 문자열로 변환 stringstream을 사용할 수 있습니다

원하는 :

#include <sstream> 
#include <string> 
#include <iostream> 

int main() { 
    std::string num_str = "10.5"; 

    std::istringstream iss(num_str); 

    float f_val = 0; 

    iss >> f_val; 

    //this will output 10.5 (as expected) 
    std::cout << f_val << std::endl; 

    return 0; 
} 

나는 이런 식으로하려고 노력

f_val에 다음 값을 할당합니다. 문자열.

이 접근 방식은 기본 제공되는 변환 확인 기능이 있으며 기본 C++ 유형 중 하나에서 작동 할 수 있다는 점에서 선호됩니다. 이 유형의 특정 값을 당신을 위해 검사를 수행하는 템플릿 함수를 작성하고 반환 할 수있는 경우에 따라서, 당신이 원하는 :

#include <sstream> 
#include <iostream> 
#include <string> 
#include <stdexcept> 

template<typename T> 
T ConvertStringToNumber(const std::string& str) 
{ 
    std::istringstream ss(str); 
    T number = 0; 

    ss >> number; 

    if (ss.fail()) 
    { 
    throw std::invalid_argument("ConvertStringToNumber:" + str); 
    } 

    return number; 
} 

int main(int argc, char argv[]){ 
    std::string num_str = "10.5"; 
    float f = ConvertStringToNumber<float>(num_str); 

    std::cout << f << std::endl; 

    return 0; 
} 
0
  1. 나는 위의 의견에 말했듯이, 대한 플로트를 사용 나이와 연령 :

    float age, age2; 
    // do math 
    cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.\n"; 
    
  2. 사용 Qt는 당신의 C와 같은 ++ 프레임 워크 및 즐길 C++

    QString age("15.5"); 
    double temp = age.toDouble(); 
    
+1

Pedantic note : Qt는 프레임 워크입니다. IDE는 Qt Creator입니다. – chris

+0

여러분의 권리, 편집하십시오 – dare

+0

선생님은 우리가 문자열에 나이를 사용하고 atoi로 변환하기를 원합니다. – Aysin

1

화씨에서 섭씨로의 전환에 대한 언급이 없으므로 무시해 드리겠습니다.

원래 작성된

, 문제는 라인에 대해 물어 것 같다 :

age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str()); 

우리는 선언을 표시되지 않습니다.

double age, age2; 

감안할 때 (이 줄 앞에 age 또는 age2의 다른 조작 없다고 가정), age + 1age2가 정의되지 않은 값을 저장 한 추가 설정 : 당분간, 나는 이전의 선언이있다 가정합니다 그것은 age2에 있습니다. 그런 다음 저장된 값에 변환 중 결과가 할당됩니다. 보류 중 ... age2을 C 문자열로 변환하고 결과에 atof()을 적용한 결과 농담입니다. 그래서 age2에 대한 가정 유형이 잘못되었습니다 - 실제로는 std::string입니까? 그러나 이 문자열 인 경우 이전 할당에 문제가있어이 age2 = atof(age2.c_str()); 할당이 작동하지 않습니다. 유사한 문제가 age = atof(age.c_str()); 할당에도 적용됩니다. 논리는 'age에 할당되어야합니다. age2 = age + 1; '.

str:string s_age = "21"; 
double age = atof(s_age.c_str()); 
double age2 = age + 1; 

std::cout << "Age: " << age << ", Next year: " << age2 << endl; 

시퀀싱에 대해 생각하십시오. 유형에 대해 생각해보십시오. 다음에 질문 할 때 유형을 보여주십시오!가능한 경우 SSCCE (Short, Self-Contained, Correct Example)를 만들고 SSCCE에 질문의 코드를 작성하는 데 필요한 사항을 찾으십시오. 나는 (질문의 몸에 다시 언급 또는 atoi() 같은 원래 질문의 제목에서 언급하지만) atof() 여부에 대한 논의를 끌어 들여있어

double 또는 int로 C 문자열을 변환 할 수있는 좋은 방법입니다; C 및 C++에서 이러한 변환을 수행하는 더 좋은 방법이 있으며 C++의 메커니즘은 C의 메커니즘과 다르며 특히 소스 문자열이 std::string 인 경우에는 다릅니다.

-2
#include "iostream.h" 

main() { 
    float a,b,rmvivek,arni; 
    char ch="123.00"; 
    a=atof(ch); 
    arni=a+2*5; 
    cout << "the a value is" << arni; 
} 
+1

당신의 코드에 설명을 추가 할 수 있다면 좋을 것입니다. – honk

+0

이것이 유효한 C++이라면 또한 좋을 것입니다. –