首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 控制台程序運行即退出:缺少主循環導致菜單無法持續顯示

     編輯:程式設計綜合問答

問題現象

程序顯示菜單,輸入選項後執行一次功能即退出,無法連續操作。

根因

main() 執行完畢進程即結束。菜單邏輯需包裹在 無限循環 中,直到用戶選擇「退出」才 break。

修正代碼骨架

int main() {
    // 初始化:讀取文件、構建數據結構
    RDatabase readerDB;
    BDatabase bookDB;

    while (true) { // ← 關鍵:主循環
        printMainMenu();
        char choice = getUserChoice();

        switch (choice) {
            case '1': handleBorrowReturn(readerDB, bookDB); break;
            case '2': bookDB.bookdata(); break;      // 圖書管理子菜單 (內部也需循環)
            case '3': readerDB.readerdata(); break;  // 借閱者管理子菜單
            case '0': 
                cout << "謝謝使用,再見!\n";
                return 0; // 正常退出
            default:
                cout << "輸入錯誤,請重新輸入。\n";
        }
    }
}

子菜單同樣需要循環

void RDatabase::readerdata() {
    while (true) { // 子菜單循環
        printReaderMenu();
        char choice = getUserChoice();
        switch (choice) {
            case '1': addReader(); break;
            case '2': modifyReader(); break;
            case '3': deleteReader(); break;
            case '4': queryReader(); break;
            case '0': return; // 返回上級菜單
            default: cout << "輸入錯誤\n";
        }
    }
}

關鍵修正點清單

問題修正
主菜單執行一次退出 while(true) 包裹主菜單
子菜單執行一次退出 每個 xxxdata() 內部 while(true)
cin >> choice 留下換行符干擾後續輸入 讀取後 cin.ignore(numeric_limits::max(), '\n');
文件讀寫模式錯誤 fstream file("xxx", ios::in | ios::binary) 讀,ios::out | ios::binary | ios::trunc 寫
結構體含指針/STL 容器直接 file.write((char*)&obj, sizeof(obj)) **嚴重錯誤**:需序列化 (逐字段寫入) 或用文本/JSON 格式

參考完整可運行版

見 codepad.org/XAeNGCSO (含序列化修正、輸入緩衝處理、主/子循環完整結構)。

總結

控制台交互程序**必須有主循環**,子功能同理。C++ 結構體持久化不能直接二進制寫入含動態內存的對象,需實現序列化邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved