[問題] UVA10008 cin cin.getline() ?

看板C_and_CPP (C/C++)作者 (佚名)時間11年前 (2015/04/21 00:22), 11年前編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
開發平台(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): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.175.159.210 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429546926.A.E87.html ※ 編輯: iloveyouever (1.175.159.210), 04/21/2015 00:23:23

04/21 01:12, , 1F
不是沒有執行 是n=0時他吃到的是第一行數字後面直到換行
04/21 01:12, 1F

04/21 01:16, , 2F
恩對,想問說,怎會這樣?
04/21 01:16, 2F

04/21 01:30, , 3F
因為前面cin >> n只有剛好把數字讀進來 不包含後面的換行
04/21 01:30, 3F

04/21 01:31, , 4F
所以對後面的getline來說 buffer裡面就只剩一個空行
04/21 01:31, 4F

04/21 01:40, , 5F
那問一下,有清空buffer的指令嗎?
04/21 01:40, 5F

04/21 01:42, , 6F
讀到換行為止, 讀進來的東西丟掉
04/21 01:42, 6F

04/21 01:42, , 7F
用 cin 就是 while(cin.get() != '\n');
04/21 01:42, 7F

04/21 01:53, , 8F
可以用 std::cin.ignore(std::numeric_limits<std::streamsi
04/21 01:53, 8F

04/21 01:53, , 9F
ze>::max(), '\n');
04/21 01:53, 9F

04/21 12:08, , 10F
cin>>n 結束後 多一個cin.ignore(); 就可以了
04/21 12:08, 10F

04/21 12:16, , 11F
謝謝l和p大的解釋^_^
04/21 12:16, 11F
文章代碼(AID): #1LDIUkw7 (C_and_CPP)
文章代碼(AID): #1LDIUkw7 (C_and_CPP)