C++에서 명령 행에서 getline()
을 통해 문자열을 읽길 원합니다.getline()에 대한 시간 제한을 구현하는 방법은 무엇입니까?
나는 타이머를 5
초에 추가하려고합니다. 읽은 문자열이 없으면 프로그램이 종료됩니다.
어떻게하면됩니까?
C++에서 명령 행에서 getline()
을 통해 문자열을 읽길 원합니다.getline()에 대한 시간 제한을 구현하는 방법은 무엇입니까?
나는 타이머를 5
초에 추가하려고합니다. 읽은 문자열이 없으면 프로그램이 종료됩니다.
어떻게하면됩니까?
방법에 대해 :
/* Wait 5 seconds. */
alarm(5);
/* getline */
/* Cancel alarm. */
alarm(0);
는 다른 방법이
setitimer
을 사용할 수 있습니다.
함수를 준비한다 alarm
그 호는 5 초 단위 SIGALRM 수신. SIGALRM
si가 프로세스를 비정상적으로 종료하는 기본 작업입니다. alarm(0)
을 호출하면 타이머가 비활성화됩니다. 아무런 입력이 없었다 경우 확인
stdin을 닫고 다시 열어 getline 문을 지나치는 방법이 있는지 궁금합니다 ...? – sje397
@cnicutar Thnq. 그것은 작동했습니다 : P –
그리고 마침내 "알람 시계"로 출력되고 있습니다. 그 하나를 억제하는 방법 ??? 덕분에 @ cnicutar –
, 5
초 동안 기다린 terminate
:
#include <thread>
#include <atomic>
#include <iostream>
#include <string>
int main()
{
std::atomic<bool> flag = false;
std::thread([&]
{
std::this_thread::sleep_for(std::chrono::seconds(5));
if (!flag)
std::terminate();
}).detach();
std::string s;
std::getline(std::cin, s);
flag = true;
std::cout << s << '\n';
}
표준 솔루션의 경우 hehe –
스레드를 사용하지 않음 pllzzz ... –
@ user2164410 - 왜 그런 요구 사항을 처리하는지는 알 수 없습니다. 간격이 끝날 때까지 기다리는 것이 아니라 5 초가되기 전에 회선 항목 신호를 허용하는 것이 쉽습니다. –
@RandyHoward을 :이 정확한 중복 생각하지 않습니다. 'getline()'은 사용하기가 훨씬 쉽고 카운터를 추가하는 방법을 알고 있으면 새로운 사람들에게 유용 할 것입니다. 이 질문은 합법적이어야합니다. –
@kassak : 아뇨, 아직도 정확한 복제본이 아닙니다. 어쨌든, 이것은'getline()'이 꽤 많이 사용되기 때문에 이것이 유용한 질문이라고 생각합니다. 잘 사용하는 방법은 미래의 독자들에게 좋을 것입니다. 단지 2 센트. –
StackOverflow는이 질문에 적절한 위치가 아닙니다. 우리는 당신의 코드를 작성하지 않습니다. 당신은 당신 자신의 코딩을 할 필요가있다. 왜 무언가가 예상대로 작동하지 않는 것인지 잘 모르겠다면, 당신이 기대하고있는 것에 대한 설명과 함께 그리고 모든 에러 메시지를 포함하여 실제로 무엇을하는지에 대한 코드를 게시한다. See [StackOverflow에 대한] (http://stackoverflow.com/about). –