getline 輸入無效的原因

2021-07-01 21:03:15 字數 1132 閱讀 6815

實際上你在每次輸入資料的時候會輸入乙個回車 『\n'

cin在讀入整數時候會忽略空白碰到非數字('\n')時停止

cin在getline時會把'\n'及之前的內容讀回來,哪怕是空行也會讀入

cin在讀入字元時會把緩衝區內當前字元讀入(不會忽略空白)

cin.ignore(1000, '\n')的含義是把緩衝區內從當前字元開始知道'\n'之前字元(如果有1000個的話)忽略掉,實際上你這裡假設一行不會超過1000個字元,所以含義是忽略一行

如果你想輸入a=1,b=2 name="***x", c='y'

所以你的輸入是

1回車2回車***x回車y回車

cin讀入a=1 碰到回車停止 此時1後面的回車還在緩衝區裡

cin讀b=2時忽略2前面的回車但是停止在2後面的回車

此時你如果掉getline 就會讀入乙個2後面回車前面的也就是空行 因此此時應當呼叫乙個cin.ignore(1000,'\n')把這個\n忽略掉

追問

我大概懂點了,但是我還是不明白為什麼放在getline後面它就會讓我輸name了,按道理應該不也是直接跳過嗎?
回答

讀入b變數的後邊必須加乙個cin.ignore(1000,'\n')

用來去掉那一行的'\n'

不然b後的getline就不用輸入就讀到乙個空行 這個時候輸出就變成了

name:c:了

追問

不是。。我的意思是

【我試過了如果沒有cin.ignore(1000, '\n'),或者把它放在 cin a/cin c後,那麼它就不會讓我輸入name直接讓我輸入c。

如果放在cin b後,就沒問題。

如果放在getline cin name後,它雖然會讓我輸入name,但是後來的輸出表明name值為空。】

這裡的第三點,我不明白

回答

如果放在getline cin name後,它雖然會讓我輸入name,但是後來的輸出表明name值為空。

這是你理解錯了放在getline cin name後 實際不是讓你輸入name 此時name已經被讀入是b後那個換行符 cin.ignore(1000, '\n')讓你的介面停住了 你輸入任何資料正好被cin.ignore(1000, '\n')說忽略

PHP ini set 無效的原因

php配置中,post max size,upload max filesize用 ini set 方法是修改不了的.正確的做法是用.htaccess檔案 plain php value upload max filesize 1024m php value post max size 1024m ...

輸入重定向 getline

getline函式 getline函式用於從標準輸入 管道或檔案 非當前處理的檔案 讀取輸入。getline函式用於讀取下一輸入行,並且設定內建變數nf nr和fnr。如果讀到一條記錄,函式就返回1.如果讀到eof end of fije,檔案末尾 則返回0。如果發生錯誤,比如開啟檔案失敗,則get...

PHP setcookie無效的原因分析

ob start 控制您的瀏覽器cache,加在setcookie 之前,一般加在頁面頂部 ob get clean 輸出瀏覽器cache,看看結果是否存在cookie,加在setcookie 之後,一般加在頁面最後 乙個在apache xp下開發的企業 上傳到iis6.0伺服器,出現setcook...