如何对数据进行排序?

时间:2016-04-03 05:35:50

标签: c loops

我是编程新手,所以这对我来说很难。如果用户的第一个输入是-999,我需要程序结束,否则他们继续输入account_num,last_name和balance。但是如果用户在第一次输入后输入-999,则它结束输入并显示结果。我无法弄清楚如何使整个-999部分工作,同时使我的客户端[x] .account_num按升序排序。我的代码如下。

#include <stdio.h>

void bubble_sort(int[], int);

struct information
{
    int     account_num;
    char    last_name[30];
    float   balance;
};

int main()
{
    /* declare variables */
    struct information   client[5];
    int       i, x, temp; 
    char      c;

    /* Prompt user */
    printf ("Enter account number, last name, and balance.\n");
    printf ("Enter -999 to end input:\n\n");

    /* prompt user to enter number of people */
    x = 0;
    while (client[x].account_num != -999)
    {
    int tmp;
        scanf ("%i", &tmp);
        /* if types -999 as their first input program ends */
        if (tmp == -999)    
        {
            break;
        }
        else if (tmp < 1 || tmp > 1000) 
        {
            printf ("*** Invalid account number. Please enter 1 - 1000 or -999 to exit ***\n");
        }
        else
        {
        client[x].account_num = tmp;
            x ++;
        }
        bubble_sort(client[x].account_num, i);
        scanf("%s", client[x].last_name);
        while ( (c = getchar() != '\n') && c != EOF); /* clear input buffer. */
        scanf("%.2f", &client[x].balance);
    }

    for (x = 0; x < 5; x++)
    printf("%i\n", &client[x].account_num);

  return 0;
}    

void bubble_sort(int list[], int i)
{
    int e, d, t;

    for (e = 0; e < (i - 1); e++)
    {
        for (d = 0; d < i - e - 1; d++)
        {
            if (list[d] > list[d + 1])
            {
               /* swapping */
               t = list[d];
               list[d] = list[d + 1];
               list[d + 1] = t;
           }/* end for*/
       }/*end for*/
    }/* end for */
}/* end function */

1 个答案:

答案 0 :(得分:0)

这里有几个问题。首先,您不想在结构中对account_numbalance编制索引,除非您希望每个帐户持有者拥有多个帐号和余额。我还建议您使用for循环替换while,以便在用户输入无效帐号时,您不必使用循环计数器x。最后,为了清楚起见,我为输入引入了一个临时变量tmp并对其执行了所有测试,只有在所有有效性测试都通过后才将内容分配给帐户结构。 tmp循环中只需要while,这就是我在那里声明它的原因,而不是让它成为main()中声明的一部分。

#include <stdio.h>

#define MAX_CLIENTS  5
#define MAX_ACCOUNTS 1000

struct information
{
    int     account_num;
    char    last_name[30];
    float   balance;
};

int main()
{
    /* declare variables */
    struct information   client[MAX_CLIENTS];
    int       i, x, people; 
    char      c;

    /* Prompt user */
    printf ("Enter account number, last name, and balance.\n");
    printf ("Enter -999 to end input:\n\n");

    /* prompt user to enter number of people */
    x = 0;
    while (x < MAX_CLIENTS)
    {
        int tmp;
        scanf ("%i", &tmp);

        /* if types -999 as their first input program ends */
        if (tmp == -999)    
        {
            break;
        }
        else if (tmp < 1 || tmp > MAX_ACCOUNTS) 
        {
            printf ("*** Invalid account number. Please enter 1 - %d or   -999 to exit ***\n", MAX_ACCOUNTS);
        }
        else
        {
            client[x].account_num = tmp;
            x ++;
        }
    }

   return 0;
}