gpt4 book ai didi

c - 无法修复数组排序和输出

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:52 24 4
gpt4 key购买 nike

我正在创建一个似乎可以正常运行的评分计算器。但是,当数组排序时,当输入中没有“0”时,它会输出“0”作为我的数组值之一。如果用户想要计算 0 分,我也无法设置标志(不是退出语句)来结束程序。

我尝试过更改初始化值、更改冒泡排序中分配的值,并使用各种输入多次运行程序。总的来说,我对编程还很陌生,答案可能就在眼前,但我似乎无法解决。

#include <stdio.h>

int main (void)
{


/* Declare variables */
/* ----------------- */

int number_of_grades;
int quit;
int g;
int grades[10] = {0};
int grade_total = 0;
int temp;
int highest_grade;
int lowest_grade;
float average_grade;
char changed = 'T';
char c;

/* Output initial greeting and prompt user for the number of grades to be entered, making sure the user enters 1-10 grades. If they enter a 0, exit the program. If they enter a number above 10, reprompt. */
/* -------------------------------------------------------------------------------------------------------------------------------- */

printf ( "Welcome to the Grade Calculator\n" );

quit = 1;
while (quit == 1)

do
{
printf ( "\nEnter the number of grades to be processed (0 - 10): " );
scanf ( "%i", &number_of_grades );
while ( (c = getchar() != '\n') && c != EOF );

if ( number_of_grades == 0)
quit = 0;
else if ( number_of_grades > 10 )
printf ( "\n *** Invalid number of grades entered. ***\n" );
} while ( number_of_grades > 10 );

/* Prompt user to enter the grades. Ensure the grade is between 0-100. If not, reprompt. */
/* ------------------------------------------------------------------------------------- */

for ( g = 1; g <= number_of_grades; g++ )
{
do
{
printf ( "\nEnter grade for student #%i: ", g );
scanf ( "%i", &grades [g] );
while ( (c = getchar() != '\n') && c != EOF );

if ( grades [g] < 0 || grades [g] > 100 )
printf ( "\n***Invalid Entry. Grade must be 0 to 100.***\n" );
} while ( grades [g] < 0 || grades [g] > 100 );

grade_total = grade_total + grades[g];
}

/* Calculate the average grade */
/* --------------------------- */

average_grade = (float) grade_total / number_of_grades;

/* Sort the array from lowest to highest grade. */
/* -------------------------------------------- */

while ( changed == 'T' )
{
changed = 'F';

for ( g = 1; g < number_of_grades; g++ )
{
if ( grades [g] > grades [g + 1])
{
temp = grades [g];
grades [g] = grades [g + 1];
grades [g + 1] = temp;

changed = 'T';
}
}
}

/* Calculate the lowest and highest grades input by the user */
/* --------------------------------------------------------- */

lowest_grade = grades[1];
highest_grade = grades [g-1];

/* Output the lowest grade, the highest grade, the average grade, and the grades sorted in ascending order to the user. */
/* -------------------------------------------------------------------------------------------------------------------- */

printf ( "\nThe minimum grade is %i", lowest_grade );
printf ( "\nThe maximum grade is %i", highest_grade );
printf ( "\nThe class average is %.1f\n", average_grade );

printf ( "\nThe %i grades entered are:\n\n", number_of_grades );
for ( g = 0; g < number_of_grades; g++ )
printf ( "%i ", grades [g] );
printf ( "\n" );



printf ( "\nThank you for using the Grade Calculator\n" );

getchar();

} /* End main */

回复:排序数组:当我输入三个等级(例如:100、98、92)时,它输出一个排序数组“0、92、98”。Re: Quit Statement for input of "0"grades to calculate: 当程序提示输入等级数并输入“0”时,输出仍然包括最终的最小值、最大值、平均值和排序数组语句,而不仅仅是最终的问候语。

最佳答案

在C语言中,数组索引从0开始结束于 size-1 .

但是您正在使用来自 1 的数组至 size .

可能当用户将“number_of_grades”设为 10 时,您将访问 array[10]这超出了范围,因为数组大小为 10,并且该内存可能有一些垃圾值。

所以您可以通过更新您的 for 循环来解决这个问题。变化

for ( g = 1; g <= number_of_grades; g++ )

for ( g = 0; g < number_of_grades; g++ )

无处不在。

注意:

(1) 一些地方array[g+1] array[g-1]存在。

您需要更新逻辑以便您只读/写 array[k]其中 0 <= k < size-1 .

(2) 您在评论中提到的初始循环问题:在 while 循环中有一个 do-while 循环。

while(1 ==  quit) 
{
do{
} while ( number_of_grades > 10)
}

我想你想做的是:

  1. 如果用户输入超过 10 个,则告诉它是无效输入。给用户多一次机会。
  2. 如果用户输入 0,则退出程序。

如果是这种情况,您可以执行以下操作。

//while(1 ==  quit)  //This is not required.
{
do{
scanf();
if ( number_of_grades == 0)
{
//Print error
return;
}
else if ( number_of_grades > 10 )
printf ( "\n *** Invalid number of grades entered. ***\n" );
} while ( number_of_grades > 10)
}

理想情况下,您应该为每个问题打开一个新帖子。否则,该帖子将变得困惑,并且无法供面临类似问题的其他人使用。

关于c - 无法修复数组排序和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57950728/

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