2 回答

TA貢獻1744條經(jīng)驗 獲得超4個贊
這只是我的猜測:讀入b時遇到回車截止,之后的getline函數(shù)把cin流中b之后的回車讀入了,于是將name置零了(這便是你說的ignore放在getline后的情況)。調(diào)用ignore后忽略掉了這個回車,于是可以讀取。用cin>>name應(yīng)該可以正常讀入,但是不能讀入空格。

TA貢獻1779條經(jīng)驗 獲得超6個贊
實際上你在每次輸入數(shù)據(jù)的時候會輸入一個回車 ‘\n'
cin在讀入整數(shù)時候會忽略空白碰到非數(shù)字('\n')時停止
cin在getline時會把'\n'及之前的內(nèi)容讀回來,哪怕是空行也會讀入
cin在讀入字符時會把緩沖區(qū)內(nèi)當前字符讀入(不會忽略空白)
cin.ignore(1000, '\n')的含義是把緩沖區(qū)內(nèi)從當前字符開始知道'\n'之前字符(如果有1000個的話)忽略掉,實際上你這里假設(shè)一行不會超過1000個字符,所以含義是忽略一行
如果你想輸入a=1,b=2 name="xxxx", c='y'
所以你的輸入是
1回車2回車xxxx回車y回車
cin讀入a=1 碰到回車停止 此時1后面的回車還在緩沖區(qū)里
cin讀b=2時忽略2前面的回車但是停止在2后面的回車
此時你如果掉getline 就會讀入一個2后面回車前面的也就是空行 因此此時應(yīng)當調(diào)用一個cin.ignore(1000,'\n')把這個\n忽略掉
- 2 回答
- 0 關(guān)注
- 338 瀏覽
添加回答
舉報