C++ 新手想问下关于 Linux 下如何实现类似 Windows 的 Pause 功能的问题

查看 6|回复 0
作者:BRS5672023   
最近几天看了一点黑马程序员的视频(没什么基础),试着跟着写了一下实现通讯录管理的代码(暂时只完成了一部分功能),想要在 Linux 系统下实现类似 Windows 里 system("pause") 的功能,比如在通讯录中写完一个联系人的信息或者显示一个联系人的信息的时候能够 Pause 一下。。代码如下
#include [i]
using namespace std;
#include
#include  // 定义 pause 函数以及 getValidInput 函数中使用
#define MAX 1000 // 通讯录最大人数
void showMenu ();
void pause ();
int getValidInput ();
// 联系人结构体
struct Person {
    string m_Name;
    int m_Gender;
    int m_Age;
    long m_Phone;
    string m_Address;
};
// 通讯录结构体
struct Addressbooks {
    struct Person personArray[MAX];
    int m_Size; // 通讯录中人员个数
};
void addPerson (Addressbooks *abs);
void showPerson (Addressbooks *abs);
int main () {
    struct Addressbooks abs;
    abs.m_Size = 0;
    while (true) {
        showMenu(); // 菜单调用
        // cin >> select;
        // 检查输入是否有效
        // if (cin.fail()) {
        //     cin.clear(); // 清除错误状态
        //     cin.ignore(numeric_limits::max(),'\n'); // 清空缓冲区
        //     cout ::max(), '\n'); // 忽略输入流中的内容直到换行符,但因为输入内容已经被清空,这里程序会等待输入一个回车(换行符)
    // }
    cout > input;
        if (cin.fail()) {
            cin.clear();
            cin.ignore(numeric_limits::max(), '\n');
            cout ::max(), '\n');
            }
            return input;
        }
    }
}
// 添加联系人
void addPerson (Addressbooks *abs) {
    // 判断通讯录是否已满
    if (abs->m_Size == MAX) {
        cout > name;
        abs->personArray[abs->m_Size].m_Name = name;
        cout > gender;
            // if (cin.fail()) {
            //     cin.clear();
            //     cin.ignore(numeric_limits::max(), '\n');
            //     cout personArray[abs->m_Size].m_Gender = gender;
                break;
            }
            cout personArray[abs->m_Size].m_Age = age;
        cout > phone;
        abs->personArray[abs->m_Size].m_Phone = phone;
        cout > address;
        abs->personArray[abs->m_Size].m_Address = address;
        cout personArray[abs->m_Size].m_Name m_Size++;
        pause();
        system("clear"); // 对于 Windows 系统,应该使用 system("cls")
    }
}
void showPerson (Addressbooks *abs) {
    if (abs->m_Size == 0) {
        cout m_Size;i++) {
            cout personArray[i].m_Name personArray[i].m_Gender personArray[i].m_Age personArray[i].m_Phone personArray[i].m_Address
然后我发现在我定义的函数 getValidInput 里面加入一个 cin.eof() 的判断就基本实现了我想要的效果,但其实我不太理解原因是什么,特别是如果我把 getValidInput 函数的这个判断给注释掉的话,那么在我输入 "2" 使用 "显示联系人" 这个功能时,需要再输入一个回车才会显示 "请按回车键继续" 的字符;而如果我仍然注释 getValidInput 中的这个判断,但取消 pause 函数定义中关于 cin.eof() 的注释(见上面的代码),那么在我输入 "1" 使用 "添加联系人" 的功能的时候,在我输入完联系人信息之后,pause() 似乎不会起作用,system("clear") 会直接清屏。。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部