beabbit 2021-06-16 19:00 采纳率: 85.7%
浏览 12
已采纳

为什么这个代码在输入’-’时不能退出for循环

#include<stdio.h>

int max(int a[], int n)

{

int p, i;

p = a[1];

for (i = 1; i <= n; i++)

{

if (p < a[i])

p = a[i];

}

return p;

}

 

int average(int a[], int n)

{

int sum, av, i;

sum = 0;

for (i = 1; i <= n; i++)

{

sum = sum + a[i];

}

av = sum / n;

return av;

}

 

int main()

{

int cj[100];

int aver, max1, i;

for (i = 1; getchar()!='-'; i++)

{

scanf("%d", cj[i]);

}

aver = average(cj, i);

max1 = max(cj, i);

printf("平均数:%d", aver);

printf("最大值:%d", max1);

return 0;

}

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-06-16 19:24
    关注

    scanf("%d", cj[i]);这里你输入整数的时候会有回车符,所以getchar()得到的是回车符,而输入的‘-’继续执行scanf("%d", cj[i]);被这语句给吸收了,所以不会退出。可以改成输入-1退出,而且scanf("%d", cj[i]);这里cj[i]前面漏掉了&

    完整代码如下:

    #include<stdio.h>
    
    int max(int a[], int n)
    {
    	int p, i;
    	p = a[1];
    	for (i = 1; i <= n; i++)
    	{
    		if (p < a[i])
    			p = a[i];
    	}
    	return p;
    }
    
    
    int average(int a[], int n)
    {
    	int sum, av, i;
    	sum = 0;
    	for (i = 1; i <= n; i++)
    	{
    		sum = sum + a[i];
    	}
    	av = sum / n;
    	return av;
    }
    
    
    
    int main()
    {
    	int cj[100];
    	int aver, max1, i;
    	for (i = 1; ; i++)
    	{
    		scanf("%d", &cj[i]); //这里需要&
    		if(cj[i] == -1)
    			break;
    	}
    	i--; //注意这里需要i-1,以去掉最后的-1
    	aver = average(cj, i);
    	max1 = max(cj, i);
    	printf("平均数:%d", aver);
    	printf("最大值:%d", max1);
    	return 0;
    }

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题