zoukankan      html  css  js  c++  java
  • 如何退出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

  • 相关阅读:
    mybatis逆向工程
    fastdfs搭建和使用
    solr学习笔记
    自己搭建anki服务器
    redis总结
    java基础——队列
    遍历文件夹下的文件,并且获取文件名字
    xls到xml
    xls文件导入数据库
    PyCharm怎样添加Qt designer
  • 原文地址:https://www.cnblogs.com/gwzz/p/15748160.html
Copyright © 2011-2022 走看看