一个C语言关于do while 循环的问题

#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#include<ctype.... #include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
int i=0,j=0;
int count=0;
char answer='n';
char *p[10]={NULL};
do
{
p[i]=(char *)malloc(20);
printf("Please input a string: ");
gets(p[i]);//1 发现1,2两个地方的录入函数一样时才可以实现循环,如果1处用gets(p[i]),2处用scanf()就不能实现循环,这是为什么?
printf("Do you want to do it again?(y or n)");
gets(&answer);//2
i++;
}while(tolower(answer)=='y');
count=i;
char *temp=(char *)malloc(20);
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(strlen(p[i])>strlen(p[j]))
{
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
printf("\nThe string in order is :\n");
for(i=0;i<count;i++)
{
printf("%s\n",p[i]);
free(p[i]);
}

getch();
}
问题在中间注释中,我不明白是怎么回事,请大家帮帮忙!
展开
 我来答
L_o_o_n_i_e
2011-02-10 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5243万
展开全部
scanf("%c",&answer);
fflush(stdin); // 要加这行,因为 &answer 只读了一个字符,输入时你打入的 Enter 键仍在缓冲区,while 循环回到 gets(p[i]); 就会读一个空行(读了残余的Enter 键),所以要用 fflush(stdin); 清除缓冲区,这样才能正确循环。

如果 gets(p[i]); 改用 scanf(),同样 要加用 fflush(stdin); 清除缓冲区,以免接着的 scanf("%c",&answer); 读 前面残余的 键。保证 正确循环:
scanf("%s",p[i]); fflush(stdin);
。。。
scanf("%c",&answer); fflush(stdin);
----------------------
小古而倾乐29
2011-02-10 · TA获得超过1724个赞
知道小有建树答主
回答量:1614
采纳率:0%
帮助的人:312万
展开全部
可以嵌套,
while(条件)
{
for(int i=0;i<X;i++)
{
do something;
}
}
do
{
for(int i=0;i<X;i++)
{
do something;
}
}while(条件)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lilaosi2001
2011-02-10 · TA获得超过823个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:360万
展开全部
是不是你的scanf用错了,应该是
scanf("%c",&answer);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式