[問題] 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