关于数组的循环问题

问题:两个数组a[10]、b[10]分别比较对应项。入a[0]与b[0]比较,a[1]与b[1]比较,以此类推。如果数组a中的元素数组b中的相应元素的数目多于数组b中元素... 问题:两个数组a[10]、b[10] 分别比较对应项。入a[0]与b[0]比较,a[1]与b[1]比较,以此类推。如果数组a中的元素数组b中的相应元素的数目多于数组b中元素大于数组a中相应元素的数目(如a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同的值),则认为数组a大于数组b,并分别统计处两个数组相应元素大于、等于、小于的次数。最后,可以使这个程序连续运行(当第一次比较结束后,并不是随便按一个键盘就退出程序,而是可以进行选择,如当输入'*'时,就重新运行改程序,进行新一轮比较,当输入'@'时,就退出整个程序。
这是我编写的程序,大家看看哪儿需要修改或者请重新给我编写一个新程序
#include<stdio.h>
int a[10];
int b[10];
int big=0,equal=0,small=0;
void figure();
void compare(int a,int b);
void main()
{
char m;
while(1)
{
figure();
printf("\nTo continue/To end: */@.\n");
m=getchar();
if(m=='@') break;
else
printf("\nNew comparition.\n");
}
printf("\nThe program is end!\n");
}

void figure()
{
int i;
printf("\ninput array[10]:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("input array[10]:\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=0;i<10;i++)
{
compare(a[i],b[i]);
}
printf("array[a] > array[b] %d times.\narray[a] = array[b] %d times.\narray[a] < array[b] %d times.\n",big,equal,small);
if(big > small)
printf("array[a] is bigger than array[b].\n");
else if(big < small)
printf("array[a] is smaller than array[b].\n");
else
printf("array[a] is equal with array[b].\n");
}

void compare(int a,int b)
{
if(a==b) equal++;
else if(a>b) big++;
else small++;
}

我编写的程序运行后不执行重复循环的那个阶段,就是在主程序的while(1)中最后想通过输入m的值来控制是否继续新一轮比较的时候,程序跳过了,并没有给我输入m的值的机会。这时为什么
展开
 我来答
zhao61
2010-11-17 · TA获得超过1459个赞
知道小有建树答主
回答量:1065
采纳率:0%
帮助的人:865万
展开全部
main()需要修改,清空一次输入缓存
void main()
{
char m;
while(1)
{
figure();
printf("\nTo continue/To end: */@.\n");
fflush(stdin);//清空
m=getchar();
if(m=='@') break;
else
printf("\nNew comparition.\n");
}
printf("\nThe program is end!\n");
}

调试通过,因为getchar对输入中断的判断方式是读到输入缓存中出现回车位置,在前面输入数组的时候,由于最后输入回车,这个回车字符并没有读到数组里,遗留在输入缓存里了,所以getchar发现输入缓存不为空,直接去读了就跳过输入了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式