C++의 파일에서 double을 어떻게 읽습니까?C++의 파일에서 double을 읽는 방법
int의 경우 getline()을 사용하고 atoi를 사용할 수 있지만 함수를 두 배로 배열하지는 않습니다. double에서 읽거나 char 배열을 double로 변환하는 데 사용할 수있는 것은 무엇입니까?
C++의 파일에서 double을 어떻게 읽습니까?C++의 파일에서 double을 읽는 방법
int의 경우 getline()을 사용하고 atoi를 사용할 수 있지만 함수를 두 배로 배열하지는 않습니다. double에서 읽거나 char 배열을 double로 변환하는 데 사용할 수있는 것은 무엇입니까?
당신은 스트림 추출을 사용할 수 있습니다
std::ifstream ifs(...);
double d;
ifs >> d;
이 작품은 다른 후 공백, 스트림 내의 다음의 데이터가 텍스트 표현의 double해야한다는 제공. 오류가 있다면
추출 후, 당신은 볼 스트림의 상태를 확인할 수 있습니다
ifs >> d;
if (!ifs)
{
// the double extraction failed
}
이것은 잘못되었습니다. '.gst()'와 약간 다른,'.rdstate() == 0'과 동등한) 실패 ('.fail()'에 대한 스트림을 테스트하십시오. 'if (! (ifs >> d)) {/ * failed * /}'또는'ifs >> d;를 사용하십시오. if (ifs) {/ * use d * /} else {/ * failed * /}'(일반적으로 더 유용)'if (ifs) {/ *. –
('! stream'을 사용하는 것은'stream.fail()'과 동일합니다.'bool (stream)'을 사용하는 것은'! stream.fail()'과 같습니다.) –
@RogerPate - 감사합니다. –
당신은 예를 들어 istringstream을 활용할 수 있습니다, 여기 toDouble 및 toInt입니다 : 내가 궁금하네요
double toDouble(string s) {
double r = 0;
istringstream ss(s);
ss >> r;
return r;
}
int toInt(string s) {
int r=0;
istringstream ss(s);
ss >> r;
return r;
}
이것은 오류 검사를 포함하여 더 나은 형식의 boost 형태로 lexical_cast로 이미 존재합니다. –
@Roger Pate : 네, 맞습니다. 이것은 부스트를 사용할 수없는 경우에 유용합니다. –
@ 빌리 : 그것은 닐이 올바르게 [지적하는] atof보다 유용하지 않습니다. (http://stackoverflow.com/questions/2615078/how-to-read-in-a-double-from-a-file- in-c/2615119 # 2615119)는 피해야합니다 (입력 내용의 유효성을 아직 확인하지 않은 경우). 그러나 여기에는 해당 사항이 없습니다. –
것은, (예를 들어, 로케일이 분리 대신 점의 쉼표를 사용할 수 있습니다 로케일 설정에주의하는 한 필요하지 않습니다 소수 부분) 또는 stringstreams는 항상 표준 "C 로켈"표기법을 기본값으로 사용합니까?
왜 char *로 읽지 않고 sscanf를 사용합니까? – Cam
@incrediman : 이미 표준 스트림을 사용하고 있다면 아마도 C 함수 두통을 다루고 싶지 않을 것입니다. –
'getline()'과'atoi()'를 고집하고 싶다면'atoi()'를'atof()'로 대체하면 괜찮을 것입니다. 그러나 @R Samuel Klatchko의 방법은 double과 int 모두 잘 작동합니다. –