前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >辨别使用getchar()、cin.get()、cin>>

辨别使用getchar()、cin.get()、cin>>

原创
作者头像
HandSomeHe_In_Fzu
发布2022-11-22 12:04:39
4750
发布2022-11-22 12:04:39
举报
文章被收录于专栏:信道编码学习专栏

cin的读取字符规则:

cin遇到回车、空格、tab键 结束,但是缓冲区还存在这三个字符,并没有将这三个字符丢弃,且指针光标在这三个字符之前,也就是说,下一次通过其他输入函数读取时,是可以读到这三个字符的。

cin.get 的读取字符规则:

读取字符:

以回车键结束,并且会将回车键作为一个字符读入,读完回车键之后,指针光标移到回车键后面,如果后面还有输入的话,会读取下一字符。

getchar()函数实际上是int getchar(void),所以它返回的是ASCII码,所以只要是ASCII码表里有的字符它都能读取出来。在调用getchar()函数时,编译器会依次读取用户键入缓存区的一个字符(注意这里只读取一个字符,如果缓存区有多个字符,那么将会读取上一次被读取字符的下一个字符),如果缓存区没有用户键入的字符,那么编译器会等待用户键入并回车后再执行下一步 (注意键入后的回车键也算一个字符,输出时直接换行)。

代码语言:javascript
复制
#include<iostream> //万能头文件
#include<stack>
#include <string>
using namespace std;

//主程序
int main() {
 char a;
 char b = '1';
 char c = '1';
 while (a = cin.get()) {    //相当于cin>>
  if (a != '#') {    //这里的 while+if 相当于while(a!=getchar()!='#'){...}  getchar 可以放第一个判断循环使用,
  //第二个循环判断不适合放getchar,会产生回车误判。
   cout << "a: " << a << "|" << endl;
   cout << "b: " << b << "|" << endl;
   cout << "c: " << c << "|" << endl;
  }
  else
   break;
 }

 char d;
 stack<string> vrle;//vrle是存放变量或者运算结果的栈
 cout << "vrle元素数:" << vrle.size() << endl;
 //while (cin>>d) {
 cin.get();

 while (d = cin.get()) {
  if (d != '#') {
   string cstr;
   cstr = d;
   cout << d << "|" << endl;
   vrle.push(cstr);
   cout << "vrle元素数:" << vrle.size() << endl;
  }
  else break;
 }

 system("pause");
 return 0;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档