2014-02-12 67 views
0

看起來是一個老問題,但這裏的問題不是使用兩個cin.get(),而是兩個以上的!如果我寫(在DEV C++)
我只得到一個輸入請求,然後結束程序。現在,我希望有CIN的至少兩個請求,因爲我預計:C++多個cin.get()

char s[50]; 
char t[100]; 

char r[100]; 

char f[100]; 

cin.get(s,49);  
cin.get(t,99); 
cin.get(r,99); 
cin.get(f,99); 

我expeted至少2個輸入請求,這是因爲:

first cin: buffer empty,I insert the string s and \n 
second cin: I have in buffer \n still, then t=\n without input request 
third cin: buffer empty, I insert the string r and \n 
fourth cin: I have in buffer \n still, then f=\n without input request 

但我只是s字符串輸入請求! 爲什麼我只有一個輸入請求?緩衝區沒有用第二個cin.get清理,讓第三個cin.get正常工作?謝謝

回答

2

t不等於'\n'。它是空的。 .get(char*,int)從不從緩衝區中刪除'\n'

更糟

,讀給t嘗試將設置cin到故障狀態,因爲沒有什麼可以讀取,這將導致所有後續讀取任何種類的cin立即失敗,甚至沒有嘗試,直到你.clear()故障狀態。

這是令人驚訝的行爲,但是您似乎已經根據您在問題中的最後一句話大部分時間猜到了,所以,好工作!你在學習!

http://en.cppreference.com/w/cpp/io/basic_istream/get