功能只返回1?

kev*_*ski 0 c return menu function-call

我遇到的问题是我的功能似乎只返回一个.我以为我正确地返回了这些功能,但似乎我不是.

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;
}
Run Code Online (Sandbox Code Playgroud)

这就是我调用中位数的方式

double mean = findMedian(array, length);
Run Code Online (Sandbox Code Playgroud)

为什么它只给我一个回报.当我试图重复goAgain时,我也没有得到正确的回报.

option = goAgain();
Run Code Online (Sandbox Code Playgroud)

与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');
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 8

这个条件:

(ch != 'n' || 'y')
Run Code Online (Sandbox Code Playgroud)

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

((ch != 'n') || 'y')
Run Code Online (Sandbox Code Playgroud)

这意味着"如果ch不是角色,n或者如果是角色y".如果您的机器使用ASCII,则y值为121.如果您执行以下操作会发生什么:

((whatever) || 121)
Run Code Online (Sandbox Code Playgroud)

对于布尔OR运算符(||),值0表示false,其他每个值表示true.当布尔OR运算的至少最少的操作数为真时,你会得到什么?你明白了.

所以,你的条件基本上与简单写作一样

 (1)
Run Code Online (Sandbox Code Playgroud)

它看起来像你想要的:

(ch != 'n' && ch != 'y');
Run Code Online (Sandbox Code Playgroud)

  • 那不就是我在那里吗? (2认同)