0

我遇到了一个问题,我的函数似乎只返回一个。我以为我正确地返回了函数,但似乎不是。

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 时,我也没有得到正确的 ch 来返回。

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');
4

2 回答 2

8

这个条件:

(ch != 'n' || 'y')

可能没有做你想做的事。它由编译器解释如下:

((ch != 'n') || 'y')

这意味着“如果ch不是字符n或如果字符y”。如果您的机器使用 ASCII,则y值为 121。如果您这样做会发生什么:

((whatever) || 121)

对于布尔OR运算符 ( ||),该值0表示假,其他所有值都表示真。当至少一个布尔 OR 运算的操作数为真时,你会得到什么?你说得对。

所以,你的条件本质上和简单地写一样

 (1)

看起来你想要:

(ch != 'n' && ch != 'y');
于 2013-04-15T17:54:24.027 回答
0

当这个:

if(length % 2 == 0)

... 评估true,您不计算 的值median,但仍返回它。

(然后添加卡尔的答案中的任何内容,即处理您问题的“以及”部分!)

于 2013-04-15T17:58:10.020 回答