一般情況下,如果cin>>一個int接下來要getline()時,我都習慣用cin.get();把buffer中的換行讀掉
但這題在int跟接下來的string之間存在空行,所以cin.get();測資有效,但提交0分。
將cin.get();讀一字改成getline()後才AC
一般情況下,如果cin>>一個int接下來要getline()時,我都習慣用cin.get();把buffer中的換行讀掉
但這題在int跟接下來的string之間存在空行,所以cin.get();測資有效,但提交0分。
將cin.get();讀一字改成getline()後才AC
實測後其實 int 和 接下來的 string 之間並不存在任何空行 (如果有的話應該會看到一堆python抱怨格式不對)
cin.get() 和 cin.ignore() 無法 ac 的原因是第一行並非只有數字,在數字和換行符之間有多餘的「空格﹞
cin.get() 和 cin.ignore() 做的事情都是一樣的,都是「忽略一個字元」
這就是用 getline 的人無法 ac 的原因
解決方式也很簡單
cin.ignore() 是允許傳入參數的,不填入任何參數就和 cin.get() 的行為一樣。
語法: std::cin.ignore( std::streamsize count = 1, int_type delim = Traits::eof() )
第一個參數意思是要忽略幾個字元,預設為 1
第二個參數意思是要什麼字元為止,預設是 eof
所以我們只需要設定一個足夠大的數字,告訴程式我們最多可能要忽略這麼多字元
那具體該設多大呢?
其實題目有說了,每行最多 75 個字元。
如果是以測資結果考慮,只要是大於 2 的數字應該都可以。
最後就是這樣寫: cin.ignore(75, '\n')
這樣就不需要額外的 buffer 了