簡體   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