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

2022-11-22 12:04:39 浏览数 (2)

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;
}

0 人点赞