如何退出while(cin >> s)
代码示例
void test_allocator_str()
{
cout << "input string for allocator, waiting ...\n";
int n = 100;
allocator<string> alloc;
auto const p = alloc.allocate(n);
auto q = p;
string s;
while (cin >> s && q != p + n)
alloc.construct(q++, s);
for_each(p, q, [](string str){
cout << str << " ";
});
while(q != p)
alloc.destroy(--q);
alloc.deallocate(p, n);
}
结果
分析
// 当从键盘上输入一串字符并按回车之后,这些字符首先被送到输入缓存区中。
// 每当按下回车键之后,cin.get()就会检查输入缓存区中是否有字符串可读。
// cin.get()并检查是否有流输入结束标识符Ctrl+Z(win)或Ctrl+D(Linux)
// 检查方式有两种:阻塞(Windows)和非阻塞(Linux)
// 阻塞式检查:只有在回车按下时,才检查缓存区字符串
// 特点:
// 0.Ctrl+Z:为流结束信号
// 1.只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下;
// 2.如果输入缓冲区中有可读的数据则不会检测Ctrl+Z
//(因为有要读的数据,^z不会产生字符,以及^z之后的数据,都不会被存储到输入缓冲区中)。
// 非阻塞式样指的是按下 Ctrl+D 之后立即响应的方式。
// 如果在按 Ctrl+D 之前已经从键盘输入了字符,则 Ctrl+D的作用就相当于回车,
// 即把这些字符送到输入缓冲区供读取使用,此时Ctrl+D不再起流结束符的作用。
// 如果按 Ctrl+D 之前没有任何键盘输入,则 Ctrl+D 就是流结束的信号。
// Windows一般使用阻塞式检查Ctrl+Z,Linux一般使用非阻塞式检查Ctrl+D。
参考
https://blog.csdn.net/weixin_33752045/article/details/86174521
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?