2014-02-12 29 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