여기에 몇 가지 문제가 있습니다. 가장 중요한 첫 번째이고 가장 중요한 것은 입니다. 대부분의 시스템에서 줄 방향 입력을 수행한다는 의미인데, 이는 제어 문자 (예 : , 아마도 ESC)를 많이 받아 들여 내부적으로 무엇인가를 수행한다는 것을 의미합니다. 돌아 오는 것보다 당신에게 그들; 심지어 입력에 ESC가 표시되지 않을 수도 있습니다.
나머지는 코드에 몇 가지 문제가 있습니다. 은 먼저 읽은 문자 이 아니라 (다음 문자를 넣을 곳)의 배열에 대한 색인을 테스트하고 있습니다. 두 번째는 int
을 입력했기 때문에 에는 개별 문자가 표시되지 않습니다. 입력 한 내용의 변환 결과 만 실제로 ESC 문자가 이 통과하면 오류 상태가 std::cin
이됩니다. 세 번째는 입력이 인지 여부를 테스트하지 않는다는 것입니다.
더 좋은 해결책은 입력에 대한 다른 규칙을 적용하는 것입니다. 예를 들어 행당 하나의 번호와 빈 줄이 신호음으로 끝납니다. 이 경우, 당신은 같은 것을 쓸 수 있습니다 : (. 당신은 당신이 전면 당신이 얻을 것이다 얼마나 많은 입력 을 알고하지 않기 때문에 내가 std::vector
를 사용한 적이 있습니다거야)
std::vector<int> a;
std::string line;
std::cout << "..." << std::endl;
while (std::getline(std::cin, line) && !line.empty()) {
std::istringstream parse(line);
int value;
parse >> value >> std::ws;
if (!parse) {
std::cout << "That wasn't an integer, try again" << std::endl;
} else if (parse.get() != EOF) {
std::cout << "Extra garbage at end of line, ignoring it" << std::endl;
} else {
a.push_back(value);
}
}
을
정말로 ESC를 사용하고 싶다면 파티 라이브러리를 curses
행에 따라 원시 입력을 수행하고 한 번에 한 문자 씩 읽고 숫자를 문자열로 변환하여 변환해야합니다 std::istringstream
을 사용하십시오.
'main'은'int'를 반환합니다. "그게 뭔데?"라는 말은 무엇을 의미합니까? –
달성해야 할 '27'수표는 무엇입니까? –
이것 좀 보시기 바랍니다 http://stackoverflow.com/questions/17174849/c-how-do-i-minmin-my-programm-using-esc-button –