关于gets()的问题

fenghuazhao 2003-09-07 02:47:52
写了一个程序,扫描字符串,搜寻某一指定字符第一次出现的位置
程序如下:
#include<stdio.h>
#define MAX 40

char * char_in(char *,char);/*搜寻字符的子函数*/

int main(void)
{
char s[MAX],*ptr,ch;
printf("Enter the string:\n");
while(gets(s)!=NULL)//循环输入
{
printf("Enter the character:\n");
scanf("%c",&ch);
if((ptr=char_in(s,ch))!=NULL)//判断是否有字符
{
printf("Have the character!\n");
puts(ptr);
}
else printf("Donot have!\n");
printf("Enter the string!\n");
}
return 0;
}

char *char_in(char *s,char ch)/*搜寻字符的子函数*/
{
while(*s)
{
if(*s==ch)
return s;
s++;
}
return NULL;
}

现在问题是:不能保证循环输入,在第一次输入之后Enter the string!与Enter
the character:一起出现
为什么会出现这种情况,gets()在使用时不能这样用么?
如果有gets()的原代码就好了
...全文
74 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcj2002 2003-09-09
  • 打赏
  • 举报
回复
应该是:while(gets(s)!=NULL) 有问题,跟一下,看看s[MAX]的以及gets(s)的值试试?
fenghuazhao 2003-09-09
  • 打赏
  • 举报
回复
up
fenghuazhao 2003-09-08
  • 打赏
  • 举报
回复
我跟踪了一下
第一个fflush是为scanf()清理缓冲区
第二个是为了gets()清理缓冲区
我把第一个注释掉,发现打印printf("need test again(y or other char):\n");后直接
跳出,说明它读取了一个非y的字符,那么这个字符从哪来?
高手指点
最好给个输入的例子来说
谢谢
fenghuazhao 2003-09-08
  • 打赏
  • 举报
回复
为什么要清理缓冲区,能否详细的讲一下gets()的过程
  • 打赏
  • 举报
回复
上面的老兄说的很对1
chen_2001 2003-09-07
  • 打赏
  • 举报
回复
up
point_to 2003-09-07
  • 打赏
  • 举报
回复

要清理缓冲区 fflush(stdin);

while(gets(s)!=NULL)//循环输入
{
printf("Enter the character:\n");
scanf("%c",&ch);
if((ptr=char_in(s,ch))!=NULL)//判断是否有字符
{
printf("Have the character!\n");
puts(ptr);
}
else
printf("Donot have!\n");

fflush(stdin);///
char cc;
printf("need test again(y or other char):\n");
scanf("%c",&cc);
if(cc!='y')
break;

printf("Enter the string:\n");
fflush(stdin);////
}
syuui 2003-09-07
  • 打赏
  • 举报
回复
在gets()后面加个getchar()或者getc()读一下回车试试。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧