hdu1062_Text Reverse(stack)
1 #include<iostream> 2 #include<stdio.h> 3 #include<stack> 4 using namespace std; 5 int main(){ 6 int n; 7 char ch; 8 scanf("%d",&n); 9 getchar(); 10 while(n--){ 11 stack<int> s; 12 while(1){ 13 ch=getchar(); 14 if(ch==' '||ch=='\n'||ch==EOF){ 15 while(!s.empty()){ 16 printf("%c",s.top());//输出栈顶 top返回栈顶元素但不会删除 17 s.pop(); //清楚栈顶 pop删除栈顶元素但不会返回,所以使用时要先top获得栈顶元素,再pop删除 18 } 19 if(ch=='\n'||ch==EOF) 20 break; 21 printf(" "); 22 } 23 else s.push(ch);//入栈 24 } 25 printf("\n"); 26 } 27 return 0; 28 }
注:
当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。
getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),则将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
没有“getchar();”,那么系统就会将我们的‘\n’符当作输入的下一个字符,也就是说它的作用是吃掉放在缓冲区的‘enter’字符。