2014-04-23 3 views
0

사용자가 0부터 1까지만 입력 할 수있는 cin을 만들려고합니다. 사용자가 해당 숫자를 입력하지 않으면 "0-1의 범위 내에서 입력하십시오."라는 오류 메시지가 나타납니다.특정 범위 내의 CIN

하지만 작동하지 않습니다.

내가 뭘 잘못하고 있니?

int alphaval = -1; 
    do 
    { 
     std::cout << "Enter Alpha between [0, 1]: "; 
     while (!(std::cin >> alphaval)) // while the input is invalid 
     { 
      std::cin.clear(); // clear the fail bit 
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore the invalid entry 
      std::cout << "Invalid Entry! Please Enter a valid value: "; 
     } 
    } 
    while (0 > alphaval || 1 < alphaval); 

    Alpha = alphaval; 
+0

'작동하지 않음'이란 무엇입니까? –

+0

"0 ~ 1"또는 "0 또는 1" –

+0

0 또는 1 내가 입력하지 않으면 오류 메시지가 표시되지 않습니다. – user3398034

답변

1

이 시도 : 당신은 함정 내가 std::getline 사용하고 입력이 유효한지 확인하기 위해 문자열을 구문 분석 것 빈 줄을 원하는 경우

int alphaval; 
cout << "Enter a number between 0 and 1: "; 
cin >> alphaval; 
while (alphaval < 0 || alphaval > 1) 
{ 
     cout << "Invalid entry! Please enter a valid value: "; 
     cin >> alphaval; 
} 
1

. 이 같은

뭔가 :

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

int main() 
{ 
    int alphaval = -1; 
    for(;;) 
    { 
     std::cout << "Enter Alpha between [0, 1]: "; 

     std::string line; 
     std::getline(std::cin, line); 
     if(!line.empty()) 
     { 
      std::stringstream s(line); 
      //If an int was parsed, the stream is now empty, and it fits the range break out of the loop. 
      if(s >> alphaval && s.eof() && (alphaval >= 0 && alphaval <= 1)) 
      { 
       break; 
      } 
     } 
     std::cout << "Invalid Entry!\n"; 
    } 
    std::cout << "Alpha = " << alphaval << "\n"; 

    return 0; 
} 

당신은 그럼 내가 루프 밖에서 초기 프롬프트를 넣어 원하는 무엇을 내부 프롬프트를 변경하려는 오류의 다른 프롬프트를 원하는 경우

.

관련 문제