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’ 则退出程序,其实在退出的时候,我们也可以再捕获一下。
作 者:Angel_Kitty
出 处:https://www.cnblogs.com/ECJTUACM-873284962/
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注我的微信公众号IT老实人(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯咖啡以资鼓励,您的肯定将是我最大的动力。thx.
我的公众号是IT老实人(IThonest),一个有故事的公众号,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!
欢迎大家关注我的Github,一些文章的备份和平常做的一些项目会存放在这里。