为什么我的C函数返回不正确的int?

Cla*_*ohn 1 c printf ascii char atoi

我正在制作一个简单的程序,要求用户提供最小值和最大值(介于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);
}
Run Code Online (Sandbox Code Playgroud)

这是结果:

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

Bat*_*eba 6

enterNumber在其中一个条件中自行调用,结果是您要丢弃.然后你输出的是一个整数值exit.(在C中使用未初始化的变量是未定义的行为).

避免这样的事情的递归,改为使用循环.