繁体   English   中英

为什么我的C函数返回错误的int?

[英]Why is my C function returning the incorrect int?

我正在制作一个简单的程序,要求用户提供最小值和最大值(介于32和127之间(包括32和127之间),但是由于某种原因,每次我尝试存储最小值时,它都会被另一个值代替。

这是代码:

#include <stdlib.h>
#include <stdio.h>
#define lenLimit 256

char text[lenLimit];

int enterNumber(int loLimit, int hiLimit) {
    printf("Please enter an integer between 32 and 127: ");
    fgets(text, lenLimit, stdin);
    int enter = atoi(text);
    int exit;
    if (enter < 32 || enter > 127) {
        printf("Min %i OUT OF range\n", enter);
        enterNumber(enter, hiLimit);
    }
    if (enter >= 32 && enter <= 127 && hiLimit > 127) {
        exit = atoi(text);
        printf("Min %i IN range\n", exit);
    }
    if (loLimit >= 32 && loLimit <= 127 && hiLimit <= 127 && enter >= loLimit) {
        exit = hiLimit;
        printf("Max %i IN range\n", exit);
    }
    printf("num returned: %i\n", exit); //prints twice, why?
    return exit;
}

void printTable(int loLimit, int hiLimit) {
    for (int i = loLimit; i <= hiLimit; i++) {
        printf("ASCII character%3d is %c.\n", i, i);
    }
}

int main(int argc, char* argv[]) {
    int min = enterNumber(31,128);
    printf("Min: %i\n", min);
    int max = enterNumber(min, 128);
    printf("Max: %i\n", max);
    printTable(min, max);
    return(EXIT_SUCCESS);
}

结果如下:

Please enter an integer between 32 and 127: 31
Min 31 OUT OF range
Please enter an integer between 32 and 127: 33
Min 33 IN range
num returned: 33
num returned: 1600375832
Min: 1600375832
Please enter an integer between 32 and 127: 45
Min 45 IN range
num returned: 45
Max: 45

您正在以下条件之一中从其自身调用enterNumber ,其结果将被丢弃。 然后,您将输出一个单位化的exit值。 (使用未初始化的变量是C中未定义的行为)。

避免对此类事情进行递归,而应使用循环。

您并没有初始化任何东西的“输入”,并且仅在您的if条件中的3中分配了2。

另外,您正在递归调用此函数(调用自身),但这样做时并未返回。 也许这是故意的,但是您在printf之后的评论让我不以为然。 此递归是为什么您看到2张照片的原因。

尝试这个...

int enterNumber(int loLimit, int hiLimit) {
    printf("Please enter an integer between 32 and 127: ");
    fgets(text, lenLimit, stdin);
    int enter = atoi(text);
    int exit = enter;
    if (enter < 32 || enter > 127) {
        printf("Min %i OUT OF range\n", enter);
        return enterNumber(enter, hiLimit);
    }
    if (enter >= 32 && enter <= 127 && hiLimit > 127) {
        printf("Min %i IN range\n", exit);
    }
    if (loLimit >= 32 && loLimit <= 127 && hiLimit <= 127 && enter >= loLimit) {
        exit = hiLimit;
        printf("Max %i IN range\n", exit);
    }
    printf("num returned: %i\n", exit); //prints twice, why?
    return exit;
}

首先调用以下功能。

int min = enterNumber(31,128);

并且,enterNumber()再次在enterNumber()中调用。 但是此代码无法获取enterNumber()的结果。 因此,显示了未初始化的值1600375832。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM