0

単純なIOの問題が何であるかわかりません:

これは私がIOを行うコードです:

cout << "Enter an Employee name: ";
getline(cin, empName);
cout << "Employee Position: "  ;
cin >> empPos;
cout << "Enter the Number of Years of Experience: ";
cin >> numOfExp;
cout << "Enter the deprtment Number: ";
cin >> deptNum;

ここに私の間違った出力があります: 名前が最初に読み取られたときはすべて問題ありませんが、2 回目に何かが自動的に名前に渡されたように見えますが、ユーザーに名前の入力を求めません。

ここに私の出力があります:

Name:               Unknown
Department Number:          0
Employee Position:          E
Years of Experience:        0
Salary:                     0
Total Number of Employees:  1
Enter an Employee name: arasd d
Employee Position: s
Enter the Number of Years of Experience: 12
Enter the deprtment Number: 12
Name:                       arasd d
Department Number:          12
Employee Position:          s
Years of Experience:        12
Salary:                     0
Total Number of Employees:  1
Enter an Employee name: Employee Position:

ご覧のとおり、最後の行が問題です。これを修正する方法はありますか?

4

1 に答える 1

1

問題はおそらく、前に最後に読み取ったものがstd::getline()整数(または他の何かを使用していることですoperator>>()。フォーマットされた入力演算子は、フォーマットと一致しない最初の文字が検出されると読み取りを停止します。たとえば、整数の読み取りの場合、monentは-数字が入力されます(先行記号を除く)。したがって、整数を読み取った後、入力が完了したことを示すために使用される新行文字は、入力バッファーに残っています。

スタックした改行に対処するには、かしめる前に先頭の空白をスキップできますstd::getline()

if (std::getline(std::cin >> std::ws, name)) {
    ...
}

ところで、ユーザー入力をチェックしたくないという状況は決してありません!入力が正しいと想定される最も些細なプログラムでも、ユーザー入力は常にチェックする必要があります。実際の問題を劇的に特定するのに役立ちます。あなたの出力を考えると、tve入力が実際に読み取られているものと一致しなかったかのように見えます...

于 2012-11-10T22:13:27.083 に答える