Таким образом, проблема здесь заключалась в том, чтобы написать программу, которая использует указатели для указания на функции и написать ее таким образом, чтобы она собирала 10 двойных чисел, давала обратную связь пользователю программы, сортировала их и печатала отсортированные результаты в качестве доказательства. , Проблема в том, что программа либо печатает оператор printf в начале бесконечно, либо собирает числа бесконечно.
Вот код
#include <stdio.h>
void func1(double x);
void below_five(void);
void above_five(void);
void other(void);
void sort(double *p[], int n);
void print_doubles(double *p[], int n);
int main(void){
double *numbers[9];
int nbr;
printf("\nEnter 10 doubles that are less than 5 or greater than 5, type 0 to exit");
for(int i = 0; i < 10 ; i++)
{
scanf("%d", &nbr);
func1(nbr);
numbers[i] = nbr;
if(nbr == 0)
break;
}
sort(numbers, 10);
print_doubles(numbers, 10);
return 0;
}
void func1(double val)
{
double (*ptr)(void);
if(val <= 5.00){
ptr = below_five;
}else if((val > 5.00) && (val <= 10.00)){
ptr = above_five;
}else
ptr = other;
}
void below_five(void){
puts("You entered a number below or equal to five");
}
void above_five(void){
puts("You entered a number above five");
}
void other(void){
puts("You entered a number well above five.");
}
void sort(double *p[], int n)
{
double *tmp;
for(int i = 0; i < n; i++)
{
if(p[i] > p[i+1]){
tmp = p[i];
p[i] = p[i+1];
p[i + 1] = tmp;
}
}
}
void print_doubles(double *p[], int n)
{
int count;
for(count = 0; count < n; count++)
printf("%d\n", p[count]);
}
Как я и сказал, я ожидаю, что он сможет собрать двойные числа в методе scanf, а затем распечатать числа после их сортировки, но, похоже, цикл for собирает двойные навсегда без конца.
Что я сделал не так, точно?