一个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();
}
问题在中间注释中,我不明白是怎么回事,请大家帮帮忙! 展开
#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();
}
问题在中间注释中,我不明白是怎么回事,请大家帮帮忙! 展开
3个回答
展开全部
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);
----------------------
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);
----------------------
展开全部
可以嵌套,
while(条件)
{
for(int i=0;i<X;i++)
{
do something;
}
}
do
{
for(int i=0;i<X;i++)
{
do something;
}
}while(条件)
while(条件)
{
for(int i=0;i<X;i++)
{
do something;
}
}
do
{
for(int i=0;i<X;i++)
{
do something;
}
}while(条件)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是你的scanf用错了,应该是
scanf("%c",&answer);
scanf("%c",&answer);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询