2

在我的循环结束时,我有:

cout<<"\n\n  any key to continue or Ctrl+Z to exit.";

它允许用户继续输入数据,或按 退出CtrlZ。当用户决定继续输入数据时,我想隐藏按下的键。

当用户按下任何键以保持循环时,我不希望出现按下的键。我怎样才能做到这一点?我正在使用 Dev-C++。我的函数代码如下。

void student::read()
{
    char response;  ofstream OS ("student.dat", ios::app);

    do
    {
        cout<<"Name: ";
        cin>>name;
        cout<<"Age: ";
        cin>>age;
        cout<<"GPA: ";
        cin>>GPA;

        //calling writefile to write into the file student.dat
        student::writefile();
        cout<<"\n\n  any key to continue or Ctrl+Z to exit."<<endl<<endl;

        cin>>response;
        cin.ignore();

    }
    while(cin);  //Ctrl+Z to exit
}
4

1 回答 1

3

有多种方法可以处理这个

但这取决于您使用的操作系统

http://opengroup.org/onlinepubs/007908799/xcurses/curses.h.html http://en.wikipedia.org/wiki/Conio.h

选项 1:使用 conio.h 的 Windows

  getch() 

或者对于 *nix 使用 curses.h

getch() 

选项 2:在 Windows 中,您可以使用 SetConsoleMode() 关闭任何标准输入函数的回显。代码:

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
  HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
  DWORD mode = 0;
  GetConsoleMode(hStdin, &mode);
  SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));

  string s;
  getline(cin, s);

  cout << s << endl;
  return 0;
 }//main

或 *nix 风格

#include <iostream>
#include <string>
#include <termios.h>
#include <unistd.h>

using namespace std;

int main()
{
   termios oldt;
   tcgetattr(STDIN_FILENO, &oldt);
   termios newt = oldt;
   newt.c_lflag &= ~ECHO;
   tcsetattr(STDIN_FILENO, TCSANOW, &newt);

   string s;
   getline(cin, s);

   cout << s << endl;
   return 0;
 }//main
于 2012-04-20T03:46:15.143 回答