저는 이전 (Conditionally Breaking A Long Sequence Of Inputs?)에서 진화 한 질문을 가지고 있지만, 지금까지 아무도 저에게 만족스러운 대답을 줄 수 없었으며, 모든 노력은 실패했습니다.문자를 기반으로 사용자 입력을 초기에 중단 할 수 없습니까?
필자는 사용자가 입력 할 필요가 없으면 일찍 깨뜨릴 수 있도록 노력하고 있습니다. 즉, 아래 코드의 경우 :
cout << '\n' << "Monster A's name is: ";
cin >> nameA;
cout << '\n' << "Monster A rolled: ";
cin >> rollM_A;
cout << '\n' << "Monster A's Dex is: ";
cin >> DexA;
cout << '\n' << "Monster A's Mod is: ";
cin >> ModA;
cout << '\n' << "Monster A's Level is: ";
cin >> LvlA;
//etc.
최대 12 개의 몬스터가 실제로 지원됩니다. 사용자가 3-4 개 정도만 사용하려는 경우 나머지를 건너 뛰고 많은 키 입력을 저장할 수 있기를 바랍니다. 나는 이미 모든 변수를 0으로 초기화하고 나중에 저장소 벡터에서 0 요소를 제거하는 기능을 가지고 있습니다. 빠진 것이 입력 체인에서 멀어지고 있습니다. 나는 다음과 같이 while 루프 포장의 다양한 형태를 시도 :
while(cin.get() != '#') {
cout << '\n' << "Monster A's name is: ";
cin >> nameA;
//etc...
}
그러나 원하는 문자를 입력시
이 코드는 단순히 출력 모든 프롬프트 ("괴물의 이름입니다"등)을 통해 이상 계속 진행하거나 추가 입력을 허용하지 않습니다. # 입력에 루프를 남겨 두어야 할지라도 코드가 무한 루프에 갇혀있는 것처럼 보입니다.아이디어가 있으십니까? 누군가가 대체 솔루션을 제공 할 수 있다면 적어도 한동안이 문제에 매달려 있었고, 적어도 내 자신의 결함을 알려주는 것이 매우 감사 할 것입니다.
감사합니다.
이것은 나를 위해 작동하지 않았다. 불행히도 그 행동은 동일합니다. –
부속 : 대신이 목적을 위해 cin.clear()를 사용하면 흥미로운 행동을 보일 수 있습니다! 끝없이 스크롤하는 대신 목록이 한 번 스크롤되어 #로 깨진 위치로 돌아가고 중지됩니다. 이것은 나를 음모합니다. 내가 지금 가까이있는 것 같아. –
알았습니다! cin.clear()와 cin.ignore()가 함께 작동 한 것 같습니다! 유일한 문제는 (매우 코스메틱 한) 캐릭터가 스킵하기 위해 두 번 입력되어야한다는 것입니다. 프롬프트를 통해 사용자에게 알려주도록해야합니다. 여기 도착에 도움 주셔서 감사합니다! : D –