讲scanf函数 http://c.biancheng.net/cpp/html/34.html
---------------------------------------------------------------------------------------------------
前一天做一道题,九度oj的1108,栈。
题目不难,很简单,吭哧吭哧敲完之后运行,整个人都斯巴达了。不仅仅是结果,而且运行的过程,我看到简直崩溃!!!
今天,2016年1月25号,在参(piao)考(qie)了别人的代码之后,尝试着把
scanf("%c",&c);
的地方全变成
cin>>c;
然后就对了。
先把九度oj1108的题目贴上来:
-
题目描述:
-
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
-
输入:
-
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。
-
输出:
-
对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。
-
样例输入:
-
3 A P 5 A 4 P 3 P 6 O A 0
-
样例输出:
-
E 5 3
1
A
0现在,我把这两个代码贴上来,以及运行的结果。
首先是scanf:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stack>
#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0
using namespace std;
int main(){
int n;
int num;
char c;
int i=0;
while(scanf("%d",&n), n){
stack<int> st;
i=0;
for(i=0; i<n ; i++)
{
scanf("%c",&c);
printf("i=%d\n",i);
if(c=='A'){
if(st.empty())
printf("E\n");
else{
printf("%d\n",st.top());
}
}
printf("i==%d\n",i);
if(c=='P'){
// printf("wwwww\n");
scanf("%d",&num);
// printf("%d\n",num);
st.push(num);
}
printf("i===%d\n",i);
if(c=='O')
{
if(st.empty()){
}
else{
st.pop();
}
}
printf("i====%d\n",i);
}
// printf("i==%d\n",i);
printf("----------------\n");
while(!st.empty()){
st.pop();
}
}
return 0;
}
诡异的地方有:
1,输入n,时,为啥,会输出i,输出i在for循环里
2,对于每次输入c,为啥i会自动增加?
cin版:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stack>
#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0
using namespace std;
int main(){
int n;
int num;
// char c;
int i=0;
while(cin>>n, n){
stack<int> st;
i=0;
char c;
// printf("yikaishi\n");
for(i=0; i<n ; i++)
{
cin>>c;
// printf("i===%d\n",i);
if(c=='A'){
if(st.empty())
printf("E\n");
else{
printf("%d\n",st.top());
}
}
// printf("i====%d\n",i);
if(c=='P'){
// printf("wwwww\n");
scanf("%d",&num);
// printf("%d\n",num);
st.push(num);
}
// printf("i=====%d\n",i);
if(c=='O')
{
if(st.empty()){
}
else{
st.pop();
}
}
// printf("i========%d\n",i);
}
printf("\n");
// printf("i==%d\n",i);
// printf("----------------\n");
while(!st.empty()){
st.pop();
}
}
return 0;
}
/*
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,i,j,a,k;
while(cin>>n,n)
{
char c;
stack<int> s;
for(i=0; i<n; i++)
{
cin>>c;
if(c=='P')
{
cin>>a;
s.push(a);
}
else if(c=='O')
{
if(!s.empty())
s.pop();
}
else
{
if(!s.empty())
cout<<s.top()<<endl;
else cout<<'E'<<endl;
}
}
cout<<endl;
}
return 0;
}
*/
/**************************************************************
Problem: 1108
User: zhouyudut
Language: C++
Result: Accepted
Time:110 ms
Memory:1520 kb
****************************************************************/