您好我已经写了一个小程序,让我从菜单中选择我想要做的事情,即查看,输入值,计算等等,它正在做我要求的大部分内容,所以我在正确的轨道上。但是,有一些我不知道如何解决的问题。
当我输入值并退出时。当我重新进入时,它再次从0开始,好像一切都清除了。我想从我离开的地方开始。其次。我想将MAX 10值作为输入。我不应该继续进入。我想用我的函数擦除数组。
我试图计算规范化的值但程序每次都退出。
#include <stdio.h>
#define LENGTH 10
int enterMeasurements();
void printArray();
int minValue();
int maxValue();
float avgValue();
void normValue();
int main(void)
{
char input;
int nrMeasurements=0;
int arrayTable[LENGTH] = {0};
int normTable[LENGTH] = {0};
int max, min, norm;
float avg;
//main menu
do
{
printf("\nMeasurement tool 1.0\n");
printf("V for (View)\n");
printf("E for (Enter Values)\n");
printf("C for (Compute Values)\n");
printf("R for (Reset Values)\n");
printf("Q for (Quit)\n");
printf("\nEnter input: ");
scanf(" %c", &input);
if(input == 'v' || input == 'V')
{
// function to print array values
printArray(arrayTable, nrMeasurements);
}
else if(input == 'e' || input == 'E')
{
// enter values here
nrMeasurements = enterMeasurements(arrayTable,nrMeasurements);
}
else if (input == 'c' || input == 'C')
{
// enter function to calc min, max and avg and prints it.
max = maxValue(arrayTable, nrMeasurements);
min = minValue(arrayTable, nrMeasurements);
avg = avgValue(arrayTable, nrMeasurements);
printf("Maximum value is: %d\n", max);
printf("Minimum value is: %d\n", min);
printf("Average value is: %.2f\n", avg);
normValue(normTable, nrMeasurements);
}
else if (input == 'r' || input == 'R')
{
// enter function that erase the entire array.
printf("[ erase array ]\n");
}
}
while (input !='q' && input != 'Q');
return 0;
}
int enterMeasurements(int arrayTable[], int nrMeasurements)
{
int i;
for (i = 0; i < LENGTH; i++)
{
printf("Enter Measurement #%i (or 0): ", i+1);
scanf("%d", &arrayTable[i]);
if (arrayTable[i] == 0 )
break;
}
return i;
}
void printArray(int arrayTable[], int nrMeasurements)
{
int i;
for (i = 0; i < nrMeasurements; i++)
{
printf(" array[%2d] : %d\n", i, arrayTable[i]);
}
}
int maxValue(int arrayTable[], int nrMeasurements)
{
int i, max;
max = arrayTable[0];
for (i=1; i<nrMeasurements; i++)
{
if (arrayTable[i]>max)
{
max=arrayTable[i];
}
}
return(max);
}
int minValue(int arrayTable[], int nrMeasurements)
{
int i, min;
min = arrayTable[0];
for (i=1; i<nrMeasurements; i++)
{
if (arrayTable[i]<min)
{
min=arrayTable[i];
}
}
return(min);
}
float avgValue(int arrayTable[], int nrMeasurements)
{
int sum,i;
float avg;
sum=0;
avg=0;
for (i=0; i<nrMeasurements;i++)
{
sum=sum+arrayTable[i];
avg=(float)sum/(i+1);
}
return(avg);
}
void normValue(int min, int max, int avg, int arrayTable[], int nrMeasurements, int normTable[])
{
int i;
for (i=0; i<nrMeasurements; i++)
{
normTable[i]=(arrayTable[i]-min)/ (max-min);
}
for (i=0; i<10; i++)
printf("Normalized Values: %d\n", normTable[i]);
}
答案 0 :(得分:0)
当我输入值并退出时。当我重新进入时,它再次从0开始,好像一切都已清除。
这是因为您总是从i = 0;
enterMeasurements
开始。您需要将其初始化为句子nrMeasurements
。
我试图计算标准化值,但程序每次都退出。
这很可能是因为你没有向normValue
传递足够的论据。
将通话更改为:
normValue(min, max, avg, arrayTable, nrMeasurements, normTable);
您应该更新函数声明以包含所有参数。这样可以避免上述错误。
int enterMeasurements(int arrayTable[], int nrMeasurements);
void printArray(int arrayTable[], int nrMeasurements);
int minValue(int arrayTable[], int nrMeasurements);
int maxValue(int arrayTable[], int nrMeasurements);
float avgValue(int arrayTable[], int nrMeasurements);
void normValue(int min, int max, int avg, int arrayTable[], int nrMeasurements, int normTable[]);