簡體   English   中英

無法使用cin.getline讀取char數組

[英]Unable to read char array using cin.getline

我們被要求創建一個執行以下操作的類:

  1. 輸入整數字符名稱基本工資
  2. 現在在課堂上,我們必須計算net_pay = basicpay * 11/10
  3. 最后,我們必須輸出ecode,ename和net_pay。

問題表明無法創建net_pay變量,其值僅需用於輸出,並且該值必須使用單獨的成員函數calc計算

這是我的代碼:

// Class employee

#include <iostream>
#include <cstdio>

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

class emp {
    int ecode;
    char ename[20];
    float basic_pay;

    public:
        void input() {
            cin >> ecode;
            cin.ignore();
            cin.getline( ename, 20);  // <-- PROBLEM HERE
            cin >> basic_pay;
        }
        float calc( float x) {
            return x+x/10;
        }
        void output() {
            cout << "\n Emp. code: " << ecode;
            cout << "\n Emp. name: " << ename;
            cout << "\n Emp. basic pay: " << basic_pay;
            cout << "\n Emp. net pay: " << calc( basic_pay);
        }
};

int main() {
    emp e1;
    cout << "Enter details of employee:\n";
    e1.input();
    cout << "\nUpdated Profile:\n";
    e1.output();
    return 0;
}

錯誤

過去一個小時,我對cin.getline這個問題感到沮喪。

字串大小<20

該代碼工作正常輸入字符串大小小於20,所以我不需要cin.ignore(),如果我使用它, cin.ignore被移除的第一個數字basic_pay

查看圖片:兩者均用於小字符串輸入。 第二個是cin.ignore()

在此處輸入圖片說明

請注意以下內容:Basic_pay為1100,但忽略了1

在此處輸入圖片說明

字串大小> 20

如果我輸入的字符數大於20的字符串,則溢出的字符將浮動,並產生錯誤。 因此,為了解決這個問題,我需要一個cin.ignore(),但是即使這樣也不起作用!

在此處輸入圖片說明

我處於兩難境地。 對於一個字符串大小, cin.ignore()是有問題的,但對於其他字符串則無效。 使用什么,不使用什么? 兩者都在造成相互沖突。 請幫幫我!

cin.getline(name, 20)只能獲取19個字符(其中一個保留為'\\ 0'),因此,如果有人輸入20個或更多cin.getline(name, 20) ,則cin.getline(name, 20)將失敗,並且下一個cin >> basic_pay也將失敗,因為仍然設置了流錯誤標志,您需要使用cin.clear()清除它們。

固定:

    #include <limits> // for numeric_limits

    if (!cin.getline(ename, 20))  // <-- PROBLEM HERE
    {
        std::cout << "Name too long, trimmed to: " << ename << std::endl;

        // clear the stream error flags and ignore rest of the line
        cin.clear();
        cin.ignore(std::numeric_limits<int>::max(), '\n');
    }

    // now this line will not fail
    cin >> basic_pay;

現場演示

暫無
暫無

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

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