簡體   English   中英

C ++:使用條件語句時控制台輸出錯誤

[英]C++: Flawed console output on using a conditional statement

我是C ++(以及一般編程)的新手。 我編寫了一個程序,該程序讀取和寫入員工聯系方式。 這段代碼運作良好:

// appropriate headers...

int main() 
{
    char trigger{};
    int options = 0;
    bool testing{};


    fileIps Inptbox;            // for entering new data
    char ext_title[20]; char ext_intercomNum[4]; char ext_dept[20];

    printf("%s", "Enter Officer's Title:\n");
    gets_s(ext_title, 20);
    printf("%s", "Enter Officer's Intercom Number:\n");
    gets_s(ext_intercomNum, 4);
    printf("%s", "Enter Officer's Department:\n");
    gets_s(ext_dept, 20);

    Inptbox.rcv_values(ext_title, ext_intercomNum, ext_dept);
    Inptbox.create_string();
    testing = Inptbox.validate();
    if (testing == true)
        return -1;
    else if (testing == false)
        Inptbox.write_string();

    // more code below...

我的問題是關於控制台輸出。 我試圖引入條件語句以啟用選擇模式。 上面的代碼用於寫入文件。 下面還有更多行代碼可以讀取文件,它們也可以正常工作。

我的挑戰是,一旦我為上述代碼引入了條件語句...

    printf("%s", "Enter 1 to WRITE DATA or 2 to READ DATA\n");
    cin >> options;
    if (options == 1)
    {
        fileIps Inptbox;           // for entering new data
        //... rest of code...
    }

    // more code below...

...控制台上的輸出有缺陷,因為顯示了第一個輸入的提示,但被完全跳過了,迫使用戶首先輸入“ 官員的對講機號碼 ”。 第三個提示效果很好。

詳細說明,當我使用cin將值1分配給options (即應用條件)時,控制台將立即打印...

Enter Officer's Title:

Enter Officer's Intercom Number:

...使我無法填寫第一個條目(即“ 標題 ”)。

我為此苦苦掙扎,並嘗試了幾項修復方法。 我使用了fgets() ,甚至嘗試使用gets() 我重新上課,但沒有任何效果。 我廣泛閱讀了諸如緩沖之類的內容,在此站點上研究了問題,並瀏覽了cstdio上的各種資源以及ios_base及其派生類(這很好,因為我學到了很多其他東西)。 但是,除非我從代碼中刪除了“ if”語句,否則我嘗試的其他任何方法都不會起作用。

因此,我的問題是:“如何解釋這種行為?如何最好地實現我的代碼以使我能夠在讀寫模式之間切換?”

我正在使用MS Visual Studio 2015

使用格式化的提取運算符'>>'存在問題。 在這種情況下,它將讀取所有可以轉換為整數的值。 但是,您必須輸入Enter表示您已准備好。 >>運算符不處理該換行符。 下次讀取輸入時,它將看到先前給定的換行符。 因此,“輸入官員的頭銜”輸入立即設置為換行符並繼續。 嘗試使用類似:

std::string line;
getline(cin, line);

並測試字符串或將其轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM