while(true) { scanf("%c",&ch1); if(ch1=="@") //输入以@结束 { break; } else { Push_Seq(S1,(int)ch1); //入栈 Push_Seq(S2,(int)ch1); //入栈 } } return 0;
这个程序用来判断回文,只是程序的一部分,不清楚为什么第一次循环完了就掉到return 0;然后第二次循环没有要求键盘录入程序就继续执行,第三次有要求键盘录入,不懂。
解决方案
2
scanf从输入缓冲区中提取字符,假如输入缓冲区为空,则等待键盘输入。
第一次scanf的时候,键盘输入以后输入缓冲区中还有一个回车符,第二次scanf的时候直接从缓冲区中提取回车符。
第一次scanf的时候,键盘输入以后输入缓冲区中还有一个回车符,第二次scanf的时候直接从缓冲区中提取回车符。
4
原因是最后的回车换行符\n也会留在缓冲区,下一次接收到\n
scanf(“%c”,&ch1);后面加上一句getchar();接收\n
scanf(“%c”,&ch1);后面加上一句getchar();接收\n
3
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
//请今后要用 char c; scanf("%c",&c); //时,都改为 char s[2]; char c; scanf("%1s",s); c=s[0];
3
scanf(“%1s”,s);
c=s[0];
和
scanf(“%c”,&c);
的区别是什么?
4
修改成这样的
#include<stdio.h> int main ( ) { char ch1; while ( true ) { ch1=getchar ( ); if ( ch1 == "@" ) //输入以@结束 { break; } else { puts ( "ok" ); } while ( getchar ( ) != "\n" ); } return 0; }
C Primer Plus中有很多关于这个问题的例子.
你也可以搜索
while(getchar( )!="\n) continue;
4
本人还是个菜鸟,上学期学的数据结构都忘光了.现在正在重新学习.
你还是问其他人吧.
你可以在CSDN博客里面搜索一些人写的有关栈的代码.有很多
本人上个学期也写了数据结构有关栈 的代码,假如你要的话,发私信给本人.
2
第二次匹配的是”\n”回车符