我遇到的问题是我的功能似乎只返回一个。我以为我正在正确地返回这些功能,但似乎我不是。
char goAgain()
{
char ch;
do
{
printf("Would you like to go again? ");
ch = getchar();
while(fgetc(stdin) != '\n');
}while(ch != 'n' || 'y');
return ch;
}
double findMedian(int array[], int length)
{
int mid;
double median, medianLeft, medianRight;
if(length % 2 == 0)
{
mid = length / 2;
// medianLeft = array[mid];
// medianRight = array[mid + 1];
}
else
{
mid = length / 2;
median = array[mid];
}
return median;
}
这就是我调用中位数的方式
double mean = findMedian(array, length);
为什么在回报中只给我一个。当我试图重复goAgain时,我也没有得到正确的回报。
option = goAgain();
与Java世界相比,c世界的情况有很多不同。
do
{
int num = menu();
if(num == 1)
fillArray(array, size);
else if(num == 2)
{
int newSize = readNum();
fillArray(array, newSize);
}
else if(num == 3)
{
int length = size;
sortArray(array);
double mean = findMean(array, length);
double median = findMedian(array, length);
printResults(mean, median);
}
else
{
printf("Please enter a valid number\n");
num = menu();
}
option = goAgain();
}while(option == 'y');
答案 0 :(得分:8)
这个条件:
(ch != 'n' || 'y')
可能没有做你想做的事。它由编译器解释如下:
((ch != 'n') || 'y')
这意味着“如果ch
不是字符n
,或者字符y
”。如果您的机器使用ASCII,则y
的值为121.如果您这样做,会发生什么:
((whatever) || 121)
对于布尔OR
运算符(||
),值0
表示false,其他每个值表示true。当布尔OR运算的至少最少的操作数为真时,你会得到什么?你明白了。
因此,您的条件基本上与简单编写
相同 (1)
看起来你想要:
(ch != 'n' && ch != 'y');
答案 1 :(得分:0)
当这个:
if(length % 2 == 0)
...评估true
,您不计算median
的值,但仍会将其返回。
(然后加入Carl的答案中的任何内容,这是处理你问题的“也是”部分!)