[问题] UVA10008 cin cin.getline() ?

楼主: iloveyouever (佚名)   2015-04-21 00:22:02
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
http://goo.gl/WevRei
目前这个程式码直接丢到UVA(上面网址的题目)上是会正常success
但是这边有一个很奇怪的地方,
for (int i = 0; i <= n; i++)
{
cin.getline(input, 256);
len = strlen(input);
for (int j = 0; j <= len; j++)
{
if (input[j] <= 90 && 65 <= input[j])
count[input[j] - 65]++;
else if (input[j] <= 122 && 97<=input[j])
count[input[j] - 97]++;
}
}
for 其实只要 for (int i=0;i<n;i++)
如果n这时输入3
他应该会n=0 n=1 n=2 跑三次下面cin.getline
但是这个程式码如果改成上述说的那样
他的n=0 会没有执行cin.getline 直接 n=1开始才输入@a@
所以就会变成 本来要输入三笔资料 却变成 只有输入两笔资料
然后就执行下面的其他运算了...
不知道这是什么问题OAO?
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/r03jpUEI
补充说明(Supplement):
作者: PkmX (阿猫)   2015-04-21 01:12:00
不是没有执行 是n=0时他吃到的是第一行数字后面直到换行
楼主: iloveyouever (佚名)   2015-04-21 01:16:00
恩对,想问说,怎会这样?
作者: PkmX (阿猫)   2015-04-21 01:30:00
因为前面cin >> n只有刚好把数字读进来 不包含后面的换行所以对后面的getline来说 buffer里面就只剩一个空行
楼主: iloveyouever (佚名)   2015-04-21 01:40:00
那问一下,有清空buffer的指令吗?
作者: LPH66 (-6.2598534e+18f)   2015-04-21 01:42:00
读到换行为止, 读进来的东西丢掉用 cin 就是 while(cin.get() != '\n');
作者: PkmX (阿猫)   2015-04-21 01:53:00
可以用 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
楼主: iloveyouever (佚名)   2015-04-21 12:08:00
cin>>n 结束后 多一个cin.ignore(); 就可以了谢谢l和p大的解释^_^

Links booklink

Contact Us: admin [ a t ] ucptt.com