Я делаю простую программу, которая запрашивает у пользователя минимальные и максимальные значения (от 32 до 127 включительно), но по какой-то причине каждый раз, когда я пытаюсь сохранить минимальное значение, оно заменяется другим значением.Почему моя функция C возвращает неверный int?
Вот код:
#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 (ввод, hiLimit)'. –
Этот цикл разрешен только в C11 и C99: 'for (int i = loLimit; i <= hiLimit; i ++)' – moffeltje
@moffeltje OP явно не использует стандарты, совместимые с C89, из-за многих объявлений переменных после операторов кода в том же блоке , '//' комментарии и т. д. –