2016-08-25 8 views
4

입력 형식의 유효성 확인과 관련하여 다른 질문이 있으므로 문제에 대한 구체적인 답변을 찾고 있습니다.whitepsace로 구분 된 정수의 유효성 검사 C++

현재 정수 값 2 개를 읽고 좌표로 저장해야합니다. I 사용했다 :

cin >> x >> y

공간에 의해 분리 & X, Y의 값을 읽는 것이다. 그러나

, INT

내 프로그램을 파괴 whitepsace

INT 이외의 다른 입력. 나는 각 값이 정수라는 것을 확인하기 위해 입력의 유효성을 검사하려고 시도했으나 첫 번째 정수 입력에만 적용됩니다.

입력 형식이 공백 값공백 값으로 유지되어 프로그램 전체에서 일관되게 값을 사용할 수 있도록해야합니다.

아이디어가 있으십니까?

것들 내가 운없이 시도 :

  • 는 DO를 사용하여 읽기 - 루프 cin.fail()/w 및 max() 확인하면서.
  • isDigit()
+0

두 번째 정수 다음에 항상 줄의 끝인지 확인하십시오. 정확히 "입력의 형식이 int 공백으로 유지됩니까?" 입력 파일에서 두 int 사이에 발생한 정확한 공백을 보존하기를 원한다는 뜻입니까? 또한 입력이 예상과 일치하지 않을 때 어떤 일이 발생하기를 원합니 까? –

답변

3

처음 두 std::string들로 두 값을 읽어하여 검증. 이렇게하면 std::cin을 실패한 상태로 만들지 않고 공백으로 구분 된 텍스트를 읽습니다.

두 단어를 읽은 후에는 각각 std::istringstream 구문을 사용하여 operator>>을 사용하여이를 int으로 구문 분석하려고 시도합니다. fail()을 사용하여 변환이 실패했는지 여부 및 전체 std::istringstream이 소비되었는지 확인하십시오. std::istringstream 실패 상태가 아닌, 그리고 get()eof을 반환하는 경우

, 다음 전체 단어하는데 성공 int으로 분석했다.

문제가 해결되었습니다.

물론 이것은 유일한 방법은 아니지만 가장 간단한 방법 일 수 있습니다.이 방법은 기본 C++ 라이브러리 클래스를 사용하는 것으로 제한되어 있습니다.

+0

나는 문제를 제기하려고했지만 - 나는 그걸 알아낼 수 있었다. 고마워. 정말 감사합니다! –

+1

이것은 드문 경우 중 하나입니다. 때로는'FILE * '을 사용하여'scanf' 계열의 함수로 되돌려 놓고 나쁘다고 생각하지 않습니다. –

+1

@JasonC'cin >> x >> y'와'scanf ("% d % d", & x, & y)'는 에러 처리 요구 사항이 매우 비슷하다 –