2017-01-05 2 views
0

입력 문자열이 올바른 형식 (올바른 형식 XXX-X-XXX)으로 작성되도록 노력하고 있지만 char temp [255]와 cin을 사용하지 않을 것입니다. getline 조합.C++에서 올바른 문자열 입력을 보장하십시오.

등록 판를 입력 : shjkf 22H 23jfh3kfh jkfhsdj h2j h2k 123-A-456

으로는 가정 regPlate

지금까지 나는이 일 외에 모든 예외 "캐치"를 관리했습니다 끝에서 올바른 형식의 문자열을 포함하여 입력에서 모든 문자열을 가져오고 문자열을 인쇄합니다. 올바르지 않습니다. 첫 번째 문자열을 읽은 후에는 잘못된 입력과 그 이후의 모든 내용을 삭제해야합니다.

cin.clear(), cin.ignore() 등을 사용해 보았습니다. 내 에있는 경우이 작동하지만 결과가 없습니다.

void main() 
{ 
    std::string regPlate; 
    do 
    { 
     cout << "Enter registration plate: "; 
     cin >> regPlate; 
     if (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9) 
     { 
      cout << "Bad entry" << endl; 

     } 
    } while (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9); 
    cout << endl << regPlate << endl; 

    system("pause"); 
} 
+2

를 사용하는 대신 std::cin>>regPlate이다. '9'와 같은 크기가 아닌지를 한 번 확인하십시오. –

+0

문제에 관해서는 ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline)을 찾고 계십니까? –

+0

@Someprogrammerdude "그러나 나는 char temp [255]와 cin.getline 조합을 사용하지 않을 것입니다." –

답변

0

에서 더 while 루프 작업, 어쩌면 뭔가처럼 : 나는 당신의 코드를 실행 (몇 가정 포함) 귀하가 제공하는 예제를 사용

int main(){ 
    string regPlate; 
    while(regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'){ 
     cout << "Enter registration plate: " << endl; 
     cin >> regPlate; 
    } 
    cout << regPlate; 
    return 0; 
} 
0

는 IT가 예상대로 작동하는 것 같다. 다음은 헤더가 포함 된 실행 파일입니다.

#include <string> 
#include <iostream> 

using namespace std; 

void main() 
{ 
    string regPlate; 
    do 
    { 
     cout << "Enter registration plate: "; 
     cin >> regPlate; 
     if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-') 
     { 
      cout << "Bad entry" << endl; 

     } 
    } while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'); 
    cout << endl << regPlate << endl; 

    system("pause"); 
} 

내가받을 출력은 다음과 같습니다

Enter registration plate: shjkf 22h 23jfh3kfh jkfhsdj h2j h2k 123-A-456 
Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: Bad Entry 
Enter registration plate: 
123-A-456 

또한 수동으로 나열된 모든 값을 입력, 또한 그런 식으로 작동하는 것처럼 보였다.

+0

입력이 잘못되었습니다. 문제를 해결했지만 어쨌든 고맙습니다. –

0

@Someprogrammerdude 덕분에 문제를 해결할 수있었습니다. 내가해야 할 일을했을 것

만 것은 9``보다 큰 * 당신은`9` *보다 작은 것을 크기를 확인하기 위해 필요하지 않습니다 std::getline(cin,regPlate)

std::string regPlate; 
    do 
    { 
     cout << "Enter registration plate: "; 
     std::getline(cin, regPlate); 
     if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-') 
     { 
      cout << "Bad entry" << endl; 

     } 
    } while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'); 
    cout << regPlate << endl;