gpt4 book ai didi

c - 使用函数对数组进行排序

转载 作者:行者123 更新时间:2023-11-30 19:30:25 25 4
gpt4 key购买 nike

我在弄清楚这段代码时遇到了极大的困难。除了 main() 之外,我还需要四个函数:读取数组元素、打印数组元素、对数组进行排序以及交换数组的两个元素。

我无法使用任何结构化代码(例如,没有 gotobreakcontinue 等语句。

我还需要能够通过输入比声明的数组大小(10)更多的值来运行程序,显示错误消息,然后对输入的前 10 个值进行排序。我需要能够运行程序并输入字符并显示错误消息并刷新错误数据并继续读取直到文件末尾或数组已满。

#include <stdio.h>

#define MAXSIZE 10 //max number of elements is 10

int main()
{
void print(const int arr[],int size);
void sort(int arr[],int size);
int getArray(int arr[],int max);
int arr[MAXSIZE]; //array
int size=getArray(arr,MAXSIZE); //size of array

printf("The array is:\n");
print(arr,size);
sort(arr,size);
printf("The sorted array is:\n");
print(arr,size);
}

void swap(int arr[],int i,int j) //swap function
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

void print(const int arr[],int size) //print function
{
int i;
for (i = 0; i < size; i++)
printf ("%d ",arr[i]);
printf("\n");
}

void sort(int arr[],int size) //sort funtion
{
void swap(int arr[], int i, int j);
int min, min_index, i, j;

for( i = 0; i <= size - 2; i++)
{
min = arr[i];
min_index = i;
for(j = i + 1; j < size; j++)
{
if (arr[j] < min)
{
min = arr[j];
min_index = j;
}
}
swap(arr, i, min_index);
}
}

int getArray(int arr[],int max)
{
int temp = 0;
int count = 0;
char c;

printf ("Enter numbers with spaces between them\n");
scanf ("%i", &temp);
while ((c = scanf ("%i", &temp)) != EOF || count < max)
{
if(c == 0){
printf ("Invalid character. Please enter the numbers again.\n");
while (getchar() != '\n');
} else {
arr[count] = temp;
count++;
}
if (c == 1)
{
printf ("Too many values\n");
return count;
}
}
return count;
}

输出不是我想要的。这是我运行时得到的结果。

Enter numbers with spaces between them
5 4 3 2 1
Too many values
The array is:
4
The sorted array is:
4

我需要程序正确接收所有元素,并且如果用户仅输入 5 个元素,则不会抛出“太多值”。

当数组超过 10 (MAXSIZE) 个元素时,它应该只打印“太多值”。截至目前,它只需要数组的第一个或第二个元素。

最佳答案

这听起来像是您想要自己完成的作业,但您要问的问题出在您的 getArray() 函数中。当它打印有关太多元素的错误消息时,它正在检查与读入的元素数量无关的错误值。您还告诉它在您没有遇到 EOF 或您尚未读取最大元素数时继续尝试读取,并且您应该查找 scanf() 实际返回的内容;您可能想检查feof(stdin)。除了其他错误之外,该函数还通过覆盖它来丢弃它读取的第一个值。

您似乎想要做的事情:保存读取的元素数量的计数,在该计数小于最大值并且剩余有效输入时读取元素;将输入存储在数组中;增加计数。您对过多输入的检查应该是计数是否处于最大值且 feof(stdin) 为 false,并且它应该在 while 循环之后,而不是在主体内。

关于c - 使用函数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052295/

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