为什么这个代码在输入’-’时不能退出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;

}

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;
}

 

 

改成while循环就行了

#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=0;

while(1){
    char c=getchar();
    if (c=='-')
        break;
    else
        cj[i++]=c-'0';

}


aver = average(cj, i);

max1 = max(cj, i);

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

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

return 0;

}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m