2016-08-14 1 views
1

프로그램을 작성하려고하는데 화면을 지우고 다음 화면으로 넘어 가기 전에 뭔가를 표시합니다. 시스템을 사용하여 화면을 지우고 있습니다. 하지만 화면이 너무 빨리 지워지는 것을 알았습니다. 내 말은, 비록 getchar()을 넣었더라도 키보드 입력을 기다리지 않고 다음 명령을 실행한다는 것입니다. 나는 이유를 알 수 없다!화면을 지우기 전에 키보드 입력을 기다리는 방법 (getchar 작동하지 않음)

여기에 키 입력 대기하도록되어 일시 정지 매크로 내 코드입니다 :

#define pause() \ 
do{ \ 
    cout<<"Press any key to continue";\ 
    getchar();\ 
} while(0); 

을 그리고 여기에 위의 매크로를 사용하는 코드는하지만 키를 눌러야하는 아래의 코드는 기다리지 않는다 화면을 지우기 전에!

void registerUser() 
{ 
    string uid,passwd; 
    cout <<"Enter UID: "; 
    cin >> uid; 
    cout<<" Enter Password: "; 
    cin>>passwd; 
    bool ret = addUser(uid,passwd); 
    if (ret == false) 
    { 
     cout<<"User "<< uid <<" already exists\n"; // This message is not displayed 
    } 
    else 
    { 
     cout<<"User " << uid <<" Successfully added\n"; // This message is not displayed 
    } 
    pause(); // Program does not wait here as expected 
    system("clear"); // Screen is cleared immediately !! 
} 
+0

인라인을 사용하지 않는 이유는 무엇입니까? 매크로는 이것을위한 좋은 도구가 아닙니다. –

답변

3

std::cin 입력 스트림 (전형적 stdin)에서 문자를 판독한다. 구분 기호를 읽을 때 중지되고 기본 구분 기호는 \n입니다.

그래서 시퀀스를 읽을 때 스트림에 여전히 후행 줄 바꿈이 있습니다.!

getchar() 그러면 \n을 읽고 돌아옵니다. 그래서 일시 중지가없는 것입니다. 당신은 스트림에서 줄 바꿈을 제거해야합니다 :

std::cin.ignore(); //Discards 1 character from the stream 
2

getchar "작동"문제는 경우에, 당신은 줄 바꿈을 읽는 것은 cin >> passwd; 남긴 것입니다.

이 문제를 해결하는 적절한 방법은 cin.ignore(1000, EOF);이며 다음 줄 바꿈까지의 모든 문자를 무시합니다.

화면을 지우지 마십시오. 뒤로 스크롤하여 과거에 무엇을했는지 확인하고 화면을 지우면 화면이 지워질 수 있습니다.

관련 문제