0

関数が 1 つしか返していないように見えるという問題があります。関数を正しく返していると思っていましたが、そうではないようです。

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

なぜそれは私の見返りに私に1つだけを与えるのですか. また、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は false を表し、他のすべての値は true を表します。そして、少なくとも論理和演算のオペランドの少なくとも 1 つが真である場合、何が得られるでしょうか? あなたは真実になります。

したがって、あなたの状態は、本質的に、単に書くのと同じです

 (1)

あなたが望むように見えます:

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