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”回车符