簡體   English   中英

為什么 cin.clear() 沒有重置 failbit 狀態?

[英]Why cin.clear() is not reseting the failbit state?

#include <iostream>
using namespace std;

int main(){
  int const size = 10;
  char input_1[size];
  char input_2[size];
  cout << "Enter input 1: " << endl;
  cin.get(input_1, size);
  cin.get();
  cin.clear();
  cout << "Enter input 2: " << endl;
  cin.get(input_2,size);
  cout << "input_2 = " << input_2 << endl;
  return 0;
}

輸出 1 ~/cplusplus $ ./conundrum.o

輸入輸入 1:

qwe

輸入輸入 2:

阿斯達

input_2 = asd

輸出 2

~/cplusplus $ ./conundrum.o

輸入輸入 1:

輸入輸入 2:

輸入_2 =

〜/ cplusplus $


當我輸入連續的字符流時,該程序按預期輸出。 OUTPUT 1 顯示預期的輸出。 但是當我只在第一個輸入時按 Enter 鍵時,此代碼不會要求 input_2 並拋出一個空的 input_2,如 OUTPUT 2 所示。根據我的理解,換行符應該已被 cin.get() 和 failbit 集消除到某些異常狀態(在 input_1 中沒有任何可存儲的內容之后)應由 cin.clear() 重置以准備第二個 cin.get(input_2,...)。 問題出在哪兒?

你應該做這個改變

cin.get(input_1, size);
cin.clear();
cin.get();

在您的代碼中cin.get()失敗,因為已經設置了失敗位。

暫無
暫無

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

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