gets()函数没有执行,直接跳过了!求解释!
程序功能:编写一个函数is_within()。它接受两个参数,一个是字符,另一个是字符串指针。如果字符在字符串中,返回1,否则返回0。在一个循环语句为这个函数提供输入的完...
程序功能:编写一个函数is_within()。它接受两个参数,一个是字符,另一个是字符串指针。如果字符在字符串中,返回1,否则返回0。在一个循环语句为这个函数提供输入的完整程序中进行测试。
遇到问题:在第二次循环输入的时候第一个gets()函数语句没有被执行到!
#include<stdio.h>
#include<ctype.h>
#include<ctype.h>
int is_within(char a[],char *b);
int main()
{
char a[50]={0};
char b[50]={0};
char pd='y';
int n=0;
while((tolower(pd)=='y'))
{
printf("请输入第一个字符串!\n");
gets(a); //在第二次循环的时候直接跳过,没有被执行到!
printf("请输入第二个字符串!\n");
gets(b);
n=is_within(a,b);
if(n==1)
{
printf("找到!");
}
else
{
printf("没有找到!");
}
printf("是否继续(y/n)?\n");
//scanf("%c",&pd);
pd=getchar();
}
return 0;
}
is_within(char a[],char *b)
{
int i=0;
int m=0;
while(a[i]!='\0')
{
for(m=0;;)
{
if(a[i+m]==*(b+m))
{
m++;
//*b++;
if(*(b+m+1)=='\0')
{
return 1;
}
}
else
break;
}
i++;
}
return 0;
} 展开
遇到问题:在第二次循环输入的时候第一个gets()函数语句没有被执行到!
#include<stdio.h>
#include<ctype.h>
#include<ctype.h>
int is_within(char a[],char *b);
int main()
{
char a[50]={0};
char b[50]={0};
char pd='y';
int n=0;
while((tolower(pd)=='y'))
{
printf("请输入第一个字符串!\n");
gets(a); //在第二次循环的时候直接跳过,没有被执行到!
printf("请输入第二个字符串!\n");
gets(b);
n=is_within(a,b);
if(n==1)
{
printf("找到!");
}
else
{
printf("没有找到!");
}
printf("是否继续(y/n)?\n");
//scanf("%c",&pd);
pd=getchar();
}
return 0;
}
is_within(char a[],char *b)
{
int i=0;
int m=0;
while(a[i]!='\0')
{
for(m=0;;)
{
if(a[i+m]==*(b+m))
{
m++;
//*b++;
if(*(b+m+1)=='\0')
{
return 1;
}
}
else
break;
}
i++;
}
return 0;
} 展开
展开全部
不是被跳过了,因为你在输入y之后按了一下回车,gets()函数将回车当成输入给接收了,所以会出现这样的问题,只需要在gets(a)前面加上一个getchar()即可,源代码如下:
#include<stdio.h>
#include<ctype.h>
#include<ctype.h>
int is_within(char a[],char *b);
int main()
{
char a[50]={0};
char b[50]={0};
char pd='y';
int n=0;
while((tolower(pd)=='y'))
{
printf("请输入第一个字符串!\n");
getchar();
gets(a); //在第二次循环的时候直接跳过,没有被执行到!
printf("请输入第二个字符串!\n");
gets(b);
n=is_within(a,b);
if(n==1)
{
printf("找到!");
}
else
{
printf("没有找到!");
}
printf("是否继续(y/n)?\n");
//scanf("%c",&pd);
pd=getchar();
}
return 0;
}
is_within(char a[],char *b)
{
int i=0;
int m=0;
while(a[i]!='\0')
{
for(m=0;;)
{
if(a[i+m]==*(b+m))
{
m++;
//*b++;
if(*(b+m+1)=='\0')
{
return 1;
}
}
else
break;
}
i++;
}
return 0;
}
我已经测试了,如果还有其他问题请追问
#include<stdio.h>
#include<ctype.h>
#include<ctype.h>
int is_within(char a[],char *b);
int main()
{
char a[50]={0};
char b[50]={0};
char pd='y';
int n=0;
while((tolower(pd)=='y'))
{
printf("请输入第一个字符串!\n");
getchar();
gets(a); //在第二次循环的时候直接跳过,没有被执行到!
printf("请输入第二个字符串!\n");
gets(b);
n=is_within(a,b);
if(n==1)
{
printf("找到!");
}
else
{
printf("没有找到!");
}
printf("是否继续(y/n)?\n");
//scanf("%c",&pd);
pd=getchar();
}
return 0;
}
is_within(char a[],char *b)
{
int i=0;
int m=0;
while(a[i]!='\0')
{
for(m=0;;)
{
if(a[i+m]==*(b+m))
{
m++;
//*b++;
if(*(b+m+1)=='\0')
{
return 1;
}
}
else
break;
}
i++;
}
return 0;
}
我已经测试了,如果还有其他问题请追问
追问
谢谢,可是为什么要gets(a);在之前加一个getchar();呢?还是不太明白,可以解释下么?
追答
因为你在输入y之后,敲了一下回车,而你接收y用的是getchar();,也就是你只接收了一个字符y,而回车也算是另外一个字符,但是当前并没有程序接收他,他就会等到程序的下一个输入点,然后作为下一个输入进入程序,所以你需要在gets(a)前面添加getchar(),主要是为了接收那个在你输入y之后敲下的那个回车键,回车键在c语言里面是'\0',是被当成一个字符来处理的,一般来说,判断一个输入是否结束,往往会用'\0'字符判断,所以,要么你在接受y的地方一起接收回车,要不你就只能在gets之前接收回车,也正是因为回车在c语言里面表示一个字符,所以才会要求一般定义字符数组的时候,要多定义一位了,如果还有其他什么不明白,请继续追问
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询