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