C代码中的错误帮助
问题描述:
此C代码给了我一些不可预知的结果。该计划旨在收集6个号码并打印最大号码,最大号码和平均号码的位置。它应该只有3个函数 - input,max_avr_pos和output来完成代码应该做的事情,但是我得到的结果不可预知。请可能是什么问题C代码中的错误帮助
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void input_vals(int arrnum[]);
void max_ave_val(int arrnum1[],double *average,int *maxval,int *position);
void print_output(double *average1,int *maxval1,int *position1);
int main(void) {
int arrnum[6],maxval2,position2;
double average2;
input_vals(arrnum);
max_ave_val(arrnum,&average2,&maxval2,&position2);
print_output(&average2,&maxval2,&position2);
_getche();
return 0;
}
void input_vals(int arrnum[]){
int count;
printf("\n Please enter six numbers\n");
for(count=0;count<6;count++) {
scanf("%d",&arrnum[count]);
}
}
void max_ave_val(int arrnum1[],double *average,int *maxval,int *position) {
int total=0;
int cnt,cnt1,cnt2,limit,maxval2,post;
limit=6;
/* finding the max value*/
for(cnt=0;cnt<limit-1;cnt++)
for(cnt1=limit-1;cnt1>cnt;--cnt1) {
if(arrnum1[cnt1-1]>arrnum1[cnt1]) {
maxval2=arrnum1[cnt-1];
post=(cnt-1)+1;
}
else {
maxval2=arrnum1[cnt1];
post=cnt1+1;
}
}
*maxval=maxval2;
*position=post;
/* solving for total */
for(cnt2=0;cnt2<limit;cnt2++);
{
total=total+arrnum1[cnt2];
}
*average=total/limit;
}
void print_output(double *average1,int *maxval1,int *position1) {
printf("\n value of the highest of the numbers is %d\n",*maxval1);
printf("\n the average of all the numbers is %g\n",*average1);
printf("\n the postion of the highest number in the list is %d\n",*position1);
}
答
for(cnt2=0;cnt2<limit;cnt2++);
{
total=total+arrnum1[cnt2];
}
;
在for循环的结束。
答
好像你可以找到最大容易。如何:
maxval2 = -1;
post = -1;
for(cnt=0;cnt<limit-1;cnt++)
{
if(arrnum1[cnt] > maxval2)
{
post = cnt;
maxval2 = arrnum1[cnt];
}
}
答
循环一次,并总结所有数字,并检查您当前的最大值对当前的数字。
for (cnt = 0; cnt < limit; cnt++) {
total += arrnum[cnt];
if (maxval < arrnum[cnt]) {
maxval = arrnum[cnt];
position = cnt;
}
}
MAXVAL应该从limit.h
答
现在我已经写这种盲目的被初始化为最小int值,但希望这会帮助,看来,不要见怪,代码suppled在这个问题有点过于复杂。
void max_ave_val(int arrnum1[],double *average,int *maxval,int *position) {
#define LIMIT 6
*maxval = 0;
*average = 0.0f;
for (Int index = 0; index < LIMIT; index++)
{
*average += arrnum1[ index ];
if (arrnum1[ index ] > *maxval)
{
*maxval = arrnum1[ index ];
*position = index;
}
}
*average /= LIMIT;
}
非常感谢 - 尼尔
它会被解释到底什么是“不可预测的结果”帮助。 – 2010-03-31 14:18:02
你有没有使用'lint'来查看可能会出现什么问题? – 2010-03-31 14:18:12
我有点困惑,为什么你要循环两次 - 你可能只会经历一次,总计得到总数,并记住当前的最大值及其位置。 – Cascabel 2010-03-31 14:19:36