2011-10-22 5 views
2

에서 계속합니다.보도 anykey 리눅스에있는 것은 어떤 다른를 취하면 나는 잘 모르겠지만, 내가이 것을 온라인으로 발견 리눅스 C++

그러나 내 프로그램에서 작동하지 않는 것 같습니다.

컴파일되고 실행되지만 기다리지 않습니다.

기본적으로, 나는 화면에 사람들의 목록을 표시하는 메서드 호출로 이어지는 메뉴가 있습니다. 시스템이 메뉴로 돌아 가기 전에 목록을 일시 중지하고 싶습니다.

//Manager's Menu 
void SelectionPage::showManagerMenu(){ 
    char option; 
    while(true) 
    { 
     system("clear");            //Clears the terminal 
     cout<<"    Flat Manager's Menu"<<endl<<endl;   //Display manager's menu 
     cout << "Select Manager option" << endl; 
     cout << "a) Add a new Flat Member" << endl; 
     cout << "b) Delete an existing Flat Member" << endl; 
     cout << "c) List Flat Members" << endl; 
     cout << "d) Duties" <<endl; 
     cout << "e) Resources" <<endl; 
     cout << "f) Reset System" <<endl; 
     cout << "q) Exit" << endl; 
     cout << "make selection: "; 
     cin >> option; 

     switch(option) {            //Takes the user to the corresponding menu or method 
      case 'a': system("clear"); 
         memberList.addNewFlatMember(points); 
        break; 
      case 'b': system("clear"); 
         memberList.deleteFlatMember(); 
        break; 
      case 'c': system("clear"); 
         memberList.listFlatMembers(); 
        break; 
      case 'd': system("clear"); 
         showDutiesMenu(); 
        break; 
      case 'e': system("clear"); 
         showResourcesMenu(); 
        break; 
      case 'f': //reset(); 
        break; 
      case 'q': exit(0); 
      default: cout << "Option not recognised: " << option << endl; 
         showManagerMenu(); 
     } 
    } 
} 

내가 선택하려는 옵션으로 C)로 연결 : 여기에

메뉴에서 내 코드입니다

//Show the current flat population 
void MemberManagement::listFlatMembers(){ 
    cout<<"    Member List"<<endl<<endl; 

    importFlatMembers();            //get flat member info from file 

    for(int count = 0; count<flatMemberList.size(); count++){ 
     cout << count+1<<". "<<flatMemberList[count].getName() << endl; 
    } 

    cout << "Press any key to Continue..."; 
    cin.ignore(numeric_limits<streamsize>::max(),'\n'); 

    return; 

} 

당신이 내 코드의 다른 비트를보고 싶다면 나를 알려 주시기 바랍니다.

미리 감사드립니다.

+1

Rob의 규칙 # 47 : '\ n'을 (를) 의미하는 경우 'endl'이라고 말하지 마십시오. http://stackoverflow.com/questions/5492380/what-is-the-c-iostream-endl-fiasco –

답변

5

* nix에서 터미널은 일반적으로 프로그램에 무엇인가 보내기 전에 입력 줄 전체를 기다립니다. 그래서 당신이 올린 예제 코드가 "Press Enter to Continue...";이라고 말한 다음 다음 줄 바꿈까지 모든 것을 버렸다.

이 문제를 방지하려면 How to check if a key was pressed in Linux?에서 설명한대로 POSIX termios(3) 함수를 사용하여 비표준 모드로 터미널을 배치해야합니다.

+0

훌륭한 조언이지만, 그의 질문에 대답하지 않습니다 : 왜'cin.ignore' 블록이 없습니까? (그의 질문에 대답하지 않는 것은 이해할 수있다 - 나는 그가 실제로 하나를 요구하지 않았 음을 알았다.) –

4

cin.get() (한 문자 만 사용)을 사용할 수 없습니까?

+3

본 기술을 본적이없는 * 사용하지 마십시오. – tylerl

+1

나는 cin.get을 cin.get로 바꾸려고했지만 어떤 차이도없는 것 같습니다. 다른 곳에서 실수를 저지른 것 같아요? – Synia

1

내 코드의 스 니펫입니다. 그것은 윈도우와 리눅스 모두에서 작동합니다.

#include <iostream> 

using std::cout; 
using std::cin; 

// Clear and pause methods 
#ifdef _WIN32 
// For windows 
void clearConsole() { 
    system("cls"); 
} 

void waitForAnyKey() { 
    system("pause"); 
} 
#elif __linux__ 
// For linux 
void clearConsole() { 
    system("clear"); 
} 

void waitForAnyKey() { 
    cout << "Press any key to continue..."; 
    system("read -s -N 1"); // Continues when pressed a key like windows 
} 

#endif 

int main() { 
    cout << "Hello World!\n"; 
    waitForAnyKey(); 
    clearConsole(); 
    return 0; 
}