为什么这段while循环执行第二次的时候没有让本人进行键盘录入就直接跳过了

C语言 码拜 4年前 (2017-05-03) 667次浏览
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的时候直接从缓冲区中提取回车符。

4

原因是最后的回车换行符\n也会留在缓冲区,下一次接收到\n
scanf(“%c”,&ch1);后面加上一句getchar();接收\n

3

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];

3

引用:

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];

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;
}

为什么这段while循环执行第二次的时候没有让本人进行键盘录入就直接跳过了
C Primer Plus中有很多关于这个问题的例子.
你也可以搜索

while(getchar( )!="\n)    
continue;

4

引用:
Quote: 引用:

修改成这样的

#include<stdio.h>
int main ( )
{
	char ch1;
	while ( true )
	{
		ch1=getchar ( );
		if ( ch1 == "@" )    //输入以@结束
		{
			break;
		}
		else
		{
			puts ( "ok" );
		}
		while ( getchar ( ) != "\n" );
	}
	return 0;
}

为什么这段while循环执行第二次的时候没有让本人进行键盘录入就直接跳过了
C Primer Plus中有很多关于这个问题的例子.
你也可以搜索

while(getchar( )!="\n)    
continue;

不是很熟悉C语言,特别是一些细节上的问题,能再问一下这个问题吗?

 while(isEmpty_Seq(S2)==-1)
        {
            Pop_Seq(S2,ch2);       //出栈
            Push_Seq(S3,ch2);     //入栈
        }
int isEmpty_Seq(SeqStack &S)
{
    if(S.top==-1)
    {
        printf("栈空");
        return 1;
    }
    else
        return -1;
}

本人假如执行下面这个语句,代码就会一直循环执行isEmpty函数,问一下这是为什么呢?

本人还是个菜鸟,上学期学的数据结构都忘光了.现在正在重新学习.
你还是问其他人吧.
你可以在CSDN博客里面搜索一些人写的有关栈的代码.有很多
本人上个学期也写了数据结构有关栈 的代码,假如你要的话,发私信给本人.

2

第二次匹配的是”\n”回车符

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么这段while循环执行第二次的时候没有让本人进行键盘录入就直接跳过了
喜欢 (0)
[1034331897@qq.com]
分享 (0)