专栏首页小樱的经验随笔C/C++中peek函数的原理及应用

C/C++中peek函数的原理及应用

C++中的peek函数

  该调用形式为cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。

  其功能是从输入流中读取一个字符 但该字符并未从输入流中删除  若把输入流比作一个 栈类 那么这里的peek函数就相当于栈的成员函数front 而如果cin.get()则相当于栈的成员函数pop。

  下面这段代码能帮助您更清晰地理解peek函数

 1 /* istream peek */
 2 #include <iostream>
 3 using namespace std;
 4 int main () 
 5 {
 6     char c;
 7     int n;
 8     char str[256];
 9     cout << "Enter a number or a word: ";
10     c=cin.peek();
11     if ( (c >= '0') && (c <= '9') )
12     {
13         cin >> n;
14         cout << "You have entered number " << n << endl;
15     }
16     else
17     {
18         cin >> str;
19         cout << " You have entered word " << str << endl;
20     }
21     return 0;
22 }

C中的peek函数(自己写的)

 1 char peek_char;
 2 
 3 static char peek()
 4 {
 5     return peek_char;
 6 }
 7 
 8 static void * __Peek_loop_func(void *pInputArg)
 9 {
10     char tmp_char;
11     while(1)
12     {
13         if(tmp_char=getchar())
14         {            
15             if((tmp_char!='\r')&&(tmp_char!='\n')&&(tmp_char!=0x0a))
16             {
17                 peek_char=tmp_char;
18                 printf("Input Char === [%c] \n",peek_char);    
19 
20                 if(peek_char=='q')
21                 {
22                     printf("Jmp out from serial == 2 \n");
23                     exit(1);
24                 }
25             }
26         }
27         usleep(1000*10);
28     }
29 }
30 
31 // 下面的代码放在主程序中,用来创建检测输入的线程.
32 
33 pthread_t tPeekThreadHandle;
34 pthread_create(&tPeekThreadHandle, NULL, &__Peek_loop_func, NULL);

如何在主程序运行的同时检测串口的输入,比如输入"q",退出函数。原理就是创建一个新线程,来接收串口的输入,如果输入的第一字符为‘q’ 则退出程序,其实在退出的时候,我们也可以再捕获一下。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【批处理学习笔记】第二十三课:用户变量和变量引用

    用户变量     编写批处理程序时,用户根据需要自己定义的变量称之为用户变量。用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效。     用户变量由...

    Angel_Kitty
  • C/C++中连接函数strcat的应用(简单讲解)

    有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢?

    Angel_Kitty
  • 新人入坑Redis必会的吐血总结

    Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map。简单来讲,Redis是一种NOSQL内存数据库...

    Angel_Kitty
  • [PHP] 通用网关接口CGI 的运行原理

    CGI 的运行原理: 1.客户端访问某个 URL 地址之后,通过 GET/POST/PUT 等方式提交数据,并通过 HTTP 协议向 Web 服务器发出请求。 ...

    陶士涵
  • c语言之define和typedef的区别

    宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符进行重新命令。被命名的标识符具有类型定义说明...

    绝命生
  • 计算机程序的思维逻辑 (8) - char的真正含义

    看似简单的char 通过前两节,我们应该对字符和文本的编码和乱码有了一个清晰的认识,但前两节都是与编程语言无关的,我们还是不知道怎么在程序中处理字符和文本。 ...

    swiftma
  • 使用Pandas读取大型Excel文件

    from: cnblogs.com/everfight/p/pandas_read_large_number.html

    hankleo
  • 制作Gmail式按钮

    这种按钮设计最大的特点,就是完全不使用背景图片,是纯粹的HTML+CSS。同时,它也不使用任何表单元素,目的是在不同浏览器下,争取视觉效果的最大统一。

    ruanyf
  • javascript变量提升详解

    对于大多数js开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解。所以在此,我想来讲一讲。

    嘿嘿嘿
  • 西部数据NAS设备被曝存在硬编码后门和未授权文件上传高危漏洞

    近日,GulfTech公司安全研究员James Bercegay发现,西部数据(Western Digital)旗下多个MyCloud系列网络存储设备(WDMy...

    FB客服

扫码关注云+社区

领取腾讯云代金券