gpt4 book ai didi

c - 我的程序无限循环,我真的不知道为什么

转载 作者:行者123 更新时间:2023-11-30 16:17:37 24 4
gpt4 key购买 nike

所以这里的问题是编写一个程序,使用指针指向函数,并以这样的方式编写它:收集 10 个 double ,向程序用户提供反馈,对它们进行排序并打印排序结果作为证明。问题是,程序要么无限地打印开头的 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]);

}

就像我说的,我期望它能够做的是将 double 收集到 scanf 方法中,然后在对它们进行排序后打印数字,但在这种情况下,for 循环似乎永远收集 double 而没有结束。

我究竟做错了什么?

最佳答案

在您的更新代码中查看我的评论。还需要进行其他修改,但运行代码所需的最少更新如下

#include <stdio.h>


void func1(double x);
void below_five(void);
void above_five(void);
void other(void);
void sort(double p[], int n); /* Simply use a array notation,
arrays passed to functions decays to pointer */
void print_doubles(double p[], int n); /* Simply use a array notation,
arrays passed to functions decays to pointer */

int main(void){

double numbers[10];
double nbr; // Change type to double, as you're reading doubles
printf("\nEnter 10 doubles that are less than
5 or greater than 5, type 0 to exit\n");
for(int i = 0; i < 10 ; i++)
{

scanf("%lf", &nbr); // Use correct format specifier to read doubles
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;
/* Why you set the pointer to function if you don't call it,
so call it here*/
(*ptr)();
}

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) /* Your sorting routine is wrong ,
see the modified code */
{
double tmp;
for(int j = 0; j < n-1; j++)
for(int i = 0; i < n-j-1; 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("%lf\n", p[count]); // Use correct format specifier

}

Demo Here

关于c - 我的程序无限循环,我真的不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56230062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com