나는 이미 가지고있는 코드 중 일부를 정리하려고합니다. 우선 이것은 할당을위한 것이며 할당은 int가 int로 취해지고 double이 double 등으로 지정되어야한다고 지정합니다. 그렇지 않으면 입력을 double로 가져 와서 int로 캐스팅합니다 if(number%1==0)
.C++ int 또는 double 입력
필자는 입력을 처리하기 위해 코드를 잘라내어 출력 문을 사용하여 제대로 작동하는지 확인했습니다.
int wholePart=0;
double decimalPart=0;
cout << "Input a number: ";
cin >> wholePart;
if(cin.peek() != '\n')
cin >> decimalPart;
cout << "wholePart = " << wholePart << endl << "decimalPart = " << decimalPart << endl;
지금 ...이 그대로 작동하고, 나는 decimalPart가 0이 아닌 경우 정수와 소수를 통합 처리하는 코드를 추가 한 후, 나는 이미 할당 요구보다 더 많은 일을했습니다, 그러나 나는 배울 것을 찾고 있는데 가능한 한이 코드를 정리하고 싶습니다.
사용자가 실제로 숫자가 아닌 문자를 입력하고 있는지 확인하기 위해 입력 섹션 전체를 다른 입력 유효성 검사와 함께 래핑 할 수 있습니다. 하지만 여기서 가장 중요한 관심사는 if(cin.peek() != '\n')
으로 충분하지 않다는 것입니다. 아마도 if(cin.peek() == '.')
은 더 나은 옵션이지만, 여기서 성취하고자하는 일을 성취하는 최선의 방법은 무엇인지 궁금합니다. 어떤 아이디어?
그리고 "오 숙제"라고만하지 마십시오. 나는 나의 프로그램이 이미 숙제의 추가 신용 부분조차 요구하는 것 이상으로 나아가고 있다는 것을 강조하고 싶다. 저는 언어에 대해 더 많이 배우려고 노력하고 있습니다. 이런 종류의 입력을 처리하는 가장 좋은 방법은 무엇일지도 모릅니다.
나는 전체적으로 꽤 인공적으로 보이고 분명히 과제의 제약 조건을 벗어나는 방법이 아니라는 것에 동의한다. tellg 및 seekg 함수의 기능과이를 올바르게 사용하는 방법에 대해 자세히 설명 할 수 있습니까? – nhgrif
@nhgrif 그들은'std :: istream'의 표준 멤버 함수입니다 : 첫 번째는 현재 위치를 (std :: streampos'로) 반환하고, 두 번째는 이전 호출에서'std :: streampos'를 취합니다. 'tellg'을 읽고 다음 읽기를 위해 그 위치를 정합니다. –
감사합니다. 나는 아마'tell (예상) '과'seekg'를 내 임무의 여분의 신용 부분을 넘어선 방법으로 구현할 것이라고 생각한다. 왜냐하면 이것들은 미래의 유용성이 더 높을 가능성이 높기 때문에'if (cin.peek() =='). ')'방법. – nhgrif