高手帮忙看一下这个while循环第二次以后怎么运行不对了?

#include<stdlib.h>#include<stdio.h>#include<string.h>#include<ctype.h>#defineSIZE50vo... #include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 50
void info(void);
void userinfo(void);
void converTolowercase(char *array);
void searching(char string[SIZE]);
int main()
{

char str='Y';
info();
while(str =='y'||str =='Y')
{
userinfo();
printf ("Input 'Y' or 'y' to continue\n");
printf ("Input other characters to exit\n");
getchar();
str=getchar();
printf ("*************************************************************\n");
}
printf ("Thank you for using the system !\n");/*程序退出*/
printf ("Press enter button to exit!\n");

getchar();
getchar();

return 0;
}
void info (void)/*系统提示信息以及版本说明*/
{

printf ("*************************************************************\n");

printf ("System : Searching the 'th' \n");

printf ("Version 1.0 @Copyright (C) by bupt,Inc. All Rights Reserved.\n");

printf ("Summary:User input an English file \nand the system will searched for the 'th' in it,\nthen it will output the number.\n ");

printf ("Create: 3/27/2009 Xiao Huirong Updated: 3/28/2009 Xiao Huirong\n");

printf ("*************************************************************\n");/*程序信息及版本号*/

printf ("Welcome to the searching system! \n");
}
void userinfo(void)
{
char string[SIZE] = {NULL};
char result;

printf("Enter the string:\n");
gets(string);

printf("Please enter y or n to determin wether to distinguish the lowercase or the uppercase ");

result=getchar();
printf("\n");

if(result=='y'||result=='Y'){
searching(string);
}
else{
if(result=='n'||result=='N'){
converTolowercase(string);
searching(string);
}
}
}
void converTolowercase(char *sptr)
{
while(*sptr != '\0')
{
if(isupper(*sptr))
{
*sptr = tolower(*sptr);
}
sptr++;
}
}
void searching(char string[SIZE])
{
int n;
int i=0;
for(n=1;n<=49;n++){
if(string[n-1]=='t'&&string[n]=='h'){
i+=1;
}
}
printf("%d\n",i);
}

此程序目的是查找一段英文中“th”的个数。
当第二遍运行while时,在函数userinfo()中跳过了gets(string),而直接到了printf("Please enter y or n to determin wether to distinguish the lowercase or the uppercase ");
为什么??
展开
 我来答
yt...0@163.com
2009-03-30 · TA获得超过447个赞
知道小有建树答主
回答量:706
采纳率:0%
帮助的人:699万
展开全部
在C语言中,接受输入单个字符的函数如scanf、getchar()等都有一个毛病,就是程序接受完用户输入的字符后并没有清空键盘输入缓冲区(或者说标准输入流),因此当用户输完字符和回车后,回车字符还留在标准输入流中,而gets函数又恰好从缓冲区的当前字符开始接收输入,这样,它接收的到第一个字符就是上次输入遗留下来的回车符号,于是程序又会把它作为结束输入的标志,不再接受用户的键盘输入。
故在gets(string); 前加一句fflush(stdin); 这句的作用就是清空当前的标准输入流(即键盘缓冲区。)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式