题目1108:堆栈的使用(谨慎使用scanf("%c",&c))
来源:互联网 发布:淘宝如何撤销快递投诉 编辑:程序博客网 时间:2024/06/05 18:02
- 题目描述:
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
- 输入:
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。
- 输出:
对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。
- 样例输入:
3AP 5A4P 3P 6O A0
- 样例输出:
E53
/*没理解scanf("%c",&c)的机制,搞了好长时间,fuck*/#include <stdio.h>#include<stack>#include<iostream>using namespace std;int main(){ int n; char c; stack<int> s; while(scanf("%d", &n)!= EOF && n!=0) { while(!s.empty()) {s.pop();} while(n--){ // scanf("%c",&c); //使用scanf("%c",&c) 简直是梦魇,因为他会读取输出缓存中的回车, //所以要配合使用getchar(),巨麻烦。用cin就比较简便 cin >> c; if(c == 'P') { int d; scanf(" %d", &d); s.push(d); } if(c == 'O') { if(!s.empty()) s.pop(); } if(c == 'A') { if(s.empty()) printf("E\n"); else { int tmp = s.top(); printf("%d\n", tmp); } } } printf("\n"); } return 0;}
在某题中想接收数字与字符相间隔的字符串,并以回车判断输入结束,写下如下形式。错误
while(scanf("%c%d", &c,&b)!=EOF && c != '\n') {
。。。。。。
}
改正:
while(scanf("%c", &c)!=EOF && c != '\n') {
scanf("%d", &b);
。。。。。。
}
0 0
- 题目1108:堆栈的使用(谨慎使用scanf("%c",&c))
- [C#] 谨慎使用DynamicInvoke
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 题目1108:堆栈的使用
- 【C】strcpy()需谨慎使用
- 题目1108:堆栈的使用 题目28
- C语言printf和scanf的使用
- C 【printf 和 scanf 函数的使用】
- 关于 scanf("%*c"); 的正确使用、、
- C语言中的scanf的使用
- C/C++ 之 scanf的使用
- 九度题目1108:堆栈的使用
- 28-题目1108:堆栈的使用
- Spring Cloud 基于eureka 服务注册中心
- JAVA利用SSH2登录LINUX并执行命令
- 1009. 说反话 (20) python篇
- android-奇异bug:parameter must be a descendant of this view
- html5转为jsp以后,布局全部无效,包括css也没起作用。
- 题目1108:堆栈的使用(谨慎使用scanf("%c",&c))
- Cadence Allegro学习之添加快捷键+锁定+对齐方式
- Linux 网络编程——套接字的介绍
- vs2015 CString 转 const char* 方法
- Matrix Again hdu3376 费用流
- 网易云音乐API分析
- IO之内核buffer----"buffer cache"
- 谈谈ES6 Promise
- Spring框架中的事务管理