сначала, как упомянуто в комментариях, добавьте x++
в конце вашего while-loop
для сканирования данных.
также вы должны знать, что отправив одного члена struct (number
) в вашу функцию сортировки и сортируя его, другие члены не будут отсортированы (вместо них будет заменен только другой номер).
также обратите внимание: sort(person[x].number, count);
вы отправляете один элемент номера члена из структуры в функцию. в то время как в объявлении функции вы сказали, что отправите ей массив целых чисел.
это должно быть sort(person, count);
, а при замедлении функции вы должны использовать sort(struct account p[],int count);
, также вы должны изменить функцию с помощью p[x].number
.
также обратите внимание, что для добавления x++
в конце вашего while-loop
вы должны удалить эти continue
, в противном случае, когда вы сделаете x--
, вы не достигнете x++
.
Я написал другую функцию сортировки, которая, на мой взгляд, более логична.
struct account
{
int number;
char full_name[30];
float balance;
};
void sort(struct account p[], int count);
int main()
{
struct account person[5];
int x = 0, i = 0, count = 0;
printf("Enter account number, last name, and balance.\n");
printf("Enter -999 to end input:\n\n");
while (1)
{
scanf("%i", &person[x].number);
if (person[x].number == -999)
{
count = x;
break;
}
if (person[x].number < 1 || person[x].number >1000)
{
printf("***Invalid account number. Please enter 1 - 1000 or -999 to exit***\n");
x--;
//remove continue
}
scanf("%s", person[x].full_name);
scanf("%f", &person[x].balance);
if (person[x].balance < 0)
{
printf("*** Invalid balance amount. Please enter a positive value. ***\n");
x--;
//remove continue
}
x++;//add x++
}
sort(person, count);//new function sort
printf("ACCOUNT\tLAST NAME\tBALANCE\n");
for (x = 0; x < count; x++)
{
printf("%d\t%s\t%f\n", person[x].number, person[x].full_name, person[x].balance);
}
}
void sort(struct account p[], int count)
{
char changed = 'T';
int x, temp;
float btemp;
char ntemp[30];// btemp for balance and ntemp for full_name
while (changed == 'T')
{
changed = 'F';
for (x = 0; x < count - 1; x++)
{
if (p[x].number > p[x + 1].number)
{
temp = p[x].number;
p[x].number = p[x + 1].number;
p[x + 1].number = temp;
btemp = p[x].balance;
p[x].balance = p[x + 1].balance;
p[x + 1].balance = btemp;
strcpy(ntemp , p[x].full_name);
strcpy(p[x].full_name , p[x + 1].full_name);
strcpy(p[x + 1].full_name , ntemp);
changed = 'T';
}
}
}
}