Кажется, что моя реализация fgets() здесь некорректна, очень понравится дополнительные глаза, чтобы посмотреть, что я сделал!fgets вызывает бесконечный цикл цикла в C
Вот код
int main(int argc, const char* argv[]){
int numIntegers;
char buffer[20];
int intArray[10];
//if no argument is passed in, terminate
if (argc == 1){
printf("no argument given, terminating..\n");
return EXIT_FAILURE;
}
else{
numIntegers = atoi(argv[1]);
//we only want numbers greater than 0
if (numIntegers <= 0){
printf("# must be greater than 0\n");
return EXIT_FAILURE;
}
else{
printf("Enter %d integer values to place in array: \n", numIntegers);
for (int i = 0; i < numIntegers; i++){
fgets(buffer, numIntegers, stdin);
intArray[i] = atoi(buffer);
printf("Index is = %d \n", i);
}
}
}
//for (int i =0; i < numIntegers; i++){
// printf("Index[%d] = %d \n", i, intArray[i]);
//}
}
Вот результат, линия без другого текста, кроме целого, вводимый пользователем. Обратите внимание, как значение i сбрасывается. Проблема возникает только тогда, когда я даю начальный аргумент чего-либо более 10. Он поворачивает цикл for в бесконечный цикл по любой причине.
$ ./a.out 11
Enter 11 integer values to place in array:
5
Index is = 0
2
Index is = 1
1
Index is = 2
2
Index is = 3
3
Index is = 4
4
Index is = 5
123
Index is = 6
123
Index is = 7
123
Index is = 8
1
Index is = 9
2
Index is = 2
2
Index is = 3
3
Index is = 4
5
Index is = 5
1
Index is = 6
12
Index is = 7
Это довольно локализованный вопрос, но объяснение того, что происходит (за пределами стандартного совета «проверьте свои границы»), это классно. Обязательно прочитайте весь путь до конца моего ответа. – Floris