簡體   English   中英

可視化IOStream Buffer C ++的問題

[英]Problems visualizing IOStream Buffer C++

我知道iostream會有緩沖區來存儲I / O數據。 說,我有一些這樣的C ++代碼。 C ++代碼由於StackOverflow不允許我將圖像嵌入該問題,因此,如果您不想單擊鏈接,請使用以下代碼。

int main(){

int Val1, Val2;
string String_Val;
cin >> Val1;
cin >> Val2;
cin.ignore(1);
getline(cin, String_Val);   
}

cin.ignore(1)為什么起作用? 這是我對緩沖區的外觀的想法
緩沖區不會像\\ n \\ n那樣有兩個\\ n,因為我先按兩次cin >> Val1,然后再按cin >> Val2來按Return / Enter鍵。 並根據此StackOverflow問題 cin >>應將\\ n留在堆棧中。 因此,我認為只有cin.ignore(2)可以在緩沖區中丟棄兩個第一個字符。 也,

getline(cin >> ws, String_Val);

根據此StackOverflow線程也可以正常工作 我們不應該只刪除空格嗎?在緩沖區中,空格是否應與換行符\\ n表示不同?
最后,如果有人碰巧知道任何交互式程序或在程序運行時幫助我可視化緩沖區的方法,那將真的有幫助。 https://visualgo.net這樣的東西。 萬分感謝!

您的代碼無法正常工作。 默認情況下, cin >>在讀取值之前將跳過任何前導空格,因此將在讀取Val2之前跳過Val1之后的任何換行符。 這就是為什么在讀取Val2之后僅忽略一個字符可能會起作用的原因,但是如果用戶放置了任何多余的空格,它將無法按預期工作(您將忽略一個空格字符,但是getline()然后將讀取其他所有內容Val2在同一行上。

您會發現很多SO問題,這些問題顯示並解釋了如何以一種健壯的方式忽略直到下一個換行符的所有內容,但總而言之:

#include <limits>
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM