C语言中有没有类似C++中 cin.peek()的函数?
cin.peek()是“偷看”输入流的下一个字符,但是不把这个字符次哦能够输入流中删除。但是不把这个字符从输入流中删除1楼你的代码是从百度百科上直接复制过来的,在微软的编...
cin.peek()是“偷看”输入流的下一个字符,但是不把这个字符次哦能够输入流中删除。
但是不把这个字符从输入流中删除
1楼你的代码是从百度百科上直接复制过来的,在微软的编译器编译时会提示peek是未定义的标识符。 展开
但是不把这个字符从输入流中删除
1楼你的代码是从百度百科上直接复制过来的,在微软的编译器编译时会提示peek是未定义的标识符。 展开
7个回答
展开全部
C++中的peek函数
该调用形式为cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
其功能是从输入流中读取一个字符 但该字符并未从输入流中删除 若把输入流比作一个 栈类 那么这里的peek函数就相当于栈的成员函数front 而如果cin.get()则相当于栈的成员函数pop。
下面这段代码能更清晰地理解peek函数
[cpp] view plaincopy
/* istream peek */
#include <iostream>
using namespace std;
int main ()
{
char c;
int n;
char str[256];
cout << "Enter a number or a word: ";
c=cin.peek();
if ( (c >= '0') && (c <= '9') )
{
cin >> n;
cout << "You have entered number " << n << endl;
}
else
{
cin >> str;
cout << " You have entered word " << str << endl;
}
return 0;
}
C中的peek函数(自己写的)
[cpp] view plaincopy
char peek_char;
static char peek()
{
return peek_char;
}
static void * __Peek_loop_func(void *pInputArg)
{
char tmp_char;
while(1)
{
if(tmp_char=getchar())
{
if((tmp_char!='\r')&&(tmp_char!='\n')&&(tmp_char!=0x0a))
{
peek_char=tmp_char;
printf("Input Char === [%c] \n",peek_char);
if(peek_char=='q')
{
printf("Jmp out from serial == 2 \n");
exit(1);
}
}
}
usleep(1000*10);
}
}
// 下面的代码放在主程序中,用来创建检测输入的线程.
pthread_t tPeekThreadHandle;
pthread_create(&tPeekThreadHandle, NULL, &__Peek_loop_func, NULL);
原理就是创建一个新线程,来接收串口的输入,如果输入的第一字符为‘q’ 则退出程序,其实在退出的时候,我们也可以再捕获一下。
该调用形式为cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
其功能是从输入流中读取一个字符 但该字符并未从输入流中删除 若把输入流比作一个 栈类 那么这里的peek函数就相当于栈的成员函数front 而如果cin.get()则相当于栈的成员函数pop。
下面这段代码能更清晰地理解peek函数
[cpp] view plaincopy
/* istream peek */
#include <iostream>
using namespace std;
int main ()
{
char c;
int n;
char str[256];
cout << "Enter a number or a word: ";
c=cin.peek();
if ( (c >= '0') && (c <= '9') )
{
cin >> n;
cout << "You have entered number " << n << endl;
}
else
{
cin >> str;
cout << " You have entered word " << str << endl;
}
return 0;
}
C中的peek函数(自己写的)
[cpp] view plaincopy
char peek_char;
static char peek()
{
return peek_char;
}
static void * __Peek_loop_func(void *pInputArg)
{
char tmp_char;
while(1)
{
if(tmp_char=getchar())
{
if((tmp_char!='\r')&&(tmp_char!='\n')&&(tmp_char!=0x0a))
{
peek_char=tmp_char;
printf("Input Char === [%c] \n",peek_char);
if(peek_char=='q')
{
printf("Jmp out from serial == 2 \n");
exit(1);
}
}
}
usleep(1000*10);
}
}
// 下面的代码放在主程序中,用来创建检测输入的线程.
pthread_t tPeekThreadHandle;
pthread_create(&tPeekThreadHandle, NULL, &__Peek_loop_func, NULL);
原理就是创建一个新线程,来接收串口的输入,如果输入的第一字符为‘q’ 则退出程序,其实在退出的时候,我们也可以再捕获一下。
展开全部
可以用这两个函数组合实现:
c = getchar(); //从缓冲区取一个字符
ungetc(c, stdin); //字符c返回到缓冲区原位置
c = getchar(); //从缓冲区取一个字符
ungetc(c, stdin); //字符c返回到缓冲区原位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C中没有类的概念,都是函数。
函数名: peek
功 能: 检查存储单元
用 法: int peek(int segment, unsigned offset);
程序例:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
int value = 0;
printf("The current status of your keyboard is:\n");
value = peek(0x0040, 0x0017);
if (value & 1)
printf("Right shift on\n");
else
printf("Right shift off\n");
if (value & 2)
printf("Left shift on\n");
else
printf("Left shift off\n");
if (value & 4)
printf("Control key on\n");
else
printf("Control key off\n");
if (value & 8)
printf("Alt key on\n");
else
printf("Alt key off\n");
if (value & 16)
printf("Scroll lock on\n");
else
printf("Scroll lock off\n");
if (value & 32)
printf("Num lock on\n");
else
printf("Num lock off\n");
if (value & 64)
printf("Caps lock on\n");
else
printf("Caps lock off\n");
return 0;
}
函数名: peek
功 能: 检查存储单元
用 法: int peek(int segment, unsigned offset);
程序例:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
int value = 0;
printf("The current status of your keyboard is:\n");
value = peek(0x0040, 0x0017);
if (value & 1)
printf("Right shift on\n");
else
printf("Right shift off\n");
if (value & 2)
printf("Left shift on\n");
else
printf("Left shift off\n");
if (value & 4)
printf("Control key on\n");
else
printf("Control key off\n");
if (value & 8)
printf("Alt key on\n");
else
printf("Alt key off\n");
if (value & 16)
printf("Scroll lock on\n");
else
printf("Scroll lock off\n");
if (value & 32)
printf("Num lock on\n");
else
printf("Num lock off\n");
if (value & 64)
printf("Caps lock on\n");
else
printf("Caps lock off\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<conio.h>
int main ()
{
char c;
int n;
char str[256];
c = getchar();
ungetc(c, stdin); //字符c返回给键盘缓冲区
if ( (c >= '0') && (c <= '9') )
{
scanf("%d", &n);
printf("You have entered number %d\n", n);
}
else
{
scanf("%s", str);
printf("You have entered word %s\n", str);
}
return 0;
}
#include<conio.h>
int main ()
{
char c;
int n;
char str[256];
c = getchar();
ungetc(c, stdin); //字符c返回给键盘缓冲区
if ( (c >= '0') && (c <= '9') )
{
scanf("%d", &n);
printf("You have entered number %d\n", n);
}
else
{
scanf("%s", str);
printf("You have entered word %s\n", str);
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据 《C++ primer》中解析
cin.peek() 将下一字节作为int值返回但不移出它
我试了个例子
#include <iostream>
using namespace std;
int main(void)
{
char ch, temp;
while (cin.get(ch)){
temp = cin.peek();
cout.put(temp);
}
return 0;
}
假如输入abc
则输出bc
我想大概是:
先cin.get(ch) 把abc插入流中 当前流位置在a处
temp = cin.peek() 通过.peek() 把当前流的下一字符的副本 即为b返回给temp
所以输出b
然后通过循环 流位置在b处 再通过.peek()返回流的下一字符c给temp
所以输出c
呵呵 不知道对不对
cin.peek() 将下一字节作为int值返回但不移出它
我试了个例子
#include <iostream>
using namespace std;
int main(void)
{
char ch, temp;
while (cin.get(ch)){
temp = cin.peek();
cout.put(temp);
}
return 0;
}
假如输入abc
则输出bc
我想大概是:
先cin.get(ch) 把abc插入流中 当前流位置在a处
temp = cin.peek() 通过.peek() 把当前流的下一字符的副本 即为b返回给temp
所以输出b
然后通过循环 流位置在b处 再通过.peek()返回流的下一字符c给temp
所以输出c
呵呵 不知道对不对
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询