[英]Unable to read char array using cin.getline
我們被要求創建一個執行以下操作的類:
問題表明無法創建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,所以我不需要cin.ignore(),如果我使用它, cin.ignore
被移除的第一個數字basic_pay
:
查看圖片:兩者均用於小字符串輸入。 第二個是cin.ignore()
請注意以下內容:Basic_pay為1100,但忽略了1
。
如果我輸入的字符數大於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.