对齐结构数组以制作表格

问题描述 投票:0回答:2

我需要使用一组结构创建一个表,但是我遇到了一个问题,除了在windows.h库中使用gotoxy之外我没有找到解决方案。这是我制作的代码,但列中的文本和数字与第一行中的字段不对齐:

#include <stdio.h>
#include <stdlib.h>
struct  student
  {
    int broj_indeksa ;
    int godina_upisa ;
    char ime_studenta [20] ;
    char prezime_studenta [30] ;
    float prosecna_ocena_I ;
    float prosecna_ocena_II ;
    float prosecna_ocena_III ;

 } ISPIT [5000] ;

int main()
    {
    struct student ISPIT[5000] ;
    int n, i, j ;
    printf("Uneti broj studenata :");
    scanf("%d", &n) ;
    printf("\n");

    for( i= 0 ; i < n ; i++)
    {
        printf("Uneti podatke za studenta broj %d\n \n" ,  i+1) ;
        printf("Broj indeksa : \n") ;
        scanf("%d", &ISPIT[ i ].broj_indeksa) ;
        printf("Godina upisa : \n") ;
        scanf("%d" , &ISPIT[ i ].godina_upisa) ;
        printf("Ime : \n") ;
        scanf("%s", &ISPIT[ i ].ime_studenta) ;
        printf("Prezime : \n") ;
        scanf("%s" ,  &ISPIT[ i ].prezime_studenta );
        printf("Prosecna ocena u prvoj godini : \n") ;
        scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_I  );
        printf("Prosecna ocena u drugoj godini : \n") ;
        scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_II  );
        printf("Prosecna ocena u trecoj godini : \n") ;
        scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_III  );
        system("cls");
    }
    printf ("Broj indeksa   Godina upisa    Ime    Prezime    Prosek I    Prosek II    Prosek III");   // HOW CAN I ALIGN THIS FOR LOOP BELOW ?
    printf("\n\n");

    for(i=0;i<n;i++)
    {
    printf("%d  ",ISPIT [ i ].broj_indeksa );
    printf("%d  ",ISPIT [ i ].godina_upisa );
    printf("%s  ",ISPIT [ i ].ime_studenta );
    printf("%s  ",ISPIT [ i ].prezime_studenta );
    printf("%.1f    ",ISPIT [ i ].prosecna_ocena_I );
    printf("%.1f    ",ISPIT [ i ].prosecna_ocena_II );
    printf("%.1f    ",ISPIT [ i ].prosecna_ocena_III );
    printf("\n");
    }
return 0;
}

我的问题是:如何在不使用除标准库之外的任何库的情况下使用表格查看结构数组?

c multidimensional-array data-structures struct alignment
2个回答
1
投票

您可以将printf与left-justify标志( - )一起使用。

 printf("%-25s%-20s%-15s%-15s%-15s%-15s%-15s\n", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena1", "Ocena2", "Ocena3");
 for(i=0;i<n;i++)
 {
    printf("%-25d%-20d%-15s%-15s%-15.2f%-15.2f%-15.2f\n", ISPIT [ i ].broj_indeksa,
                                                          ISPIT [ i ].godina_upisa,
                                                          ISPIT [ i ].ime_studenta,
                                                          ISPIT [ i ].prezime_studenta,
                                                          ISPIT [ i ].prosecna_ocena_I,
                                                          ISPIT [ i ].prosecna_ocena_II,
                                                          ISPIT [ i ].prosecna_ocena_III);
 }

0
投票
#include <stdio.h>
#include <stdlib.h>
struct  student
{
    int broj_indeksa ;
    int godina_upisa ;
    char ime_studenta [15] ;
    char prezime_studenta [25] ;
    float prosecna_ocena_I ;
    float prosecna_ocena_II;
    float prosecna_ocena_III ;

} ISPIT [5000] , a;

int main()
{
    struct student ISPIT[5000] ;
    int n, i, j;
    //      UCITAVANJE BROJA STUDENATA
    printf("Uneti broj studenata :");
    scanf("%d", &n) ;
    printf("\n");
    //      UCITAVANJE POJEDINACNIH PODATAKA ZA STUDENTA
    for( i= 0 ; i < n ; i++)
        {
            printf("Uneti podatke za studenta broj %d\n \n" ,  i+1) ;
            printf("Broj indeksa : \n") ;
            scanf("%d", &ISPIT[ i ].broj_indeksa) ;
            printf("Godina upisa : \n") ;
            scanf("%d" , &ISPIT[ i ].godina_upisa) ;
            printf("Ime : \n") ;
            scanf("%s", &ISPIT[ i ].ime_studenta) ;
            printf("Prezime : \n") ;
            scanf("%s" ,  &ISPIT[ i ].prezime_studenta );
            printf("Prosecna ocena u prvoj godini : \n") ;
            scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_I  );
            printf("Prosecna ocena u drugoj godini : \n") ;
            scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_II  );
            printf("Prosecna ocena u trecoj godini : \n") ;
            scanf("%f" ,  &ISPIT[ i ].prosecna_ocena_III  );
            system("cls");
        }

        //      PRIKAZIVANJE
    float prosecna_ocena_I ;
    float prosecna_ocena_II;
    float prosecna_ocena_III;
    int k ;

    printf("\n\n\n\n");
    for( k = 0 ; k < 137; k++) { printf("=") ; } printf("\n");
    printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |\n", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
    for( k = 0 ; k < 137; k++) { printf("=") ; }
    printf("\n");
    for(i=0;i<n;i++)
        {
            printf("\n");
            printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |\n",
                                                      ISPIT [ i ].broj_indeksa,
                                                      ISPIT [ i ].godina_upisa,
                                                      ISPIT [ i ].ime_studenta,
                                                      ISPIT [ i ].prezime_studenta,
                                                      ISPIT [ i ].prosecna_ocena_I,
                                                      ISPIT [ i ].prosecna_ocena_II  = (ISPIT [ i ].prosecna_ocena_I +ISPIT [ i ].prosecna_ocena_II ) / 2,
                                                      ISPIT [ i ].prosecna_ocena_III = (ISPIT [ i ].prosecna_ocena_I +ISPIT [ i ].prosecna_ocena_II +ISPIT [ i ].prosecna_ocena_III ) / 3);

                                                        for( k = 0 ; k< 137; k++) { printf("_"); }
                                                        printf("\n");
        }
    system("pause");
    system("cls");

    // SORTIRANJE PREMA GODINI UPISA U OPADAJUCEM PORETKU
    for ( i = 1 ; i < n ; i++)
        {
            for ( j =0 ; j < n-i ; j++)
                {
                    if ( ISPIT [ j ].godina_upisa < ISPIT [ j+1 ].godina_upisa)
                        {
                            a= ISPIT [ j ] ;
                            ISPIT [ j ] = ISPIT [ j+1 ] ;
                            ISPIT [ j+1 ] = a ;
                        }
                }
        }

    printf("\n\n") ;
    printf("Posle sortiranja po godini upisa u opadajucem poretku \n\n");
    for( k = 0 ; k < 137; k++) { printf("=") ; } printf("\n");
    printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |\n", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
    for( k = 0 ; k < 137; k++) { printf("=") ; }
    printf("\n");

    for(i=0;i<n;i++)
        {
            printf("\n");
            printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |\n",
                                                      ISPIT [ i ].broj_indeksa,
                                                      ISPIT [ i ].godina_upisa,
                                                      ISPIT [ i ].ime_studenta,
                                                      ISPIT [ i ].prezime_studenta,
                                                      ISPIT [ i ].prosecna_ocena_I,
                                                      ISPIT [ i ].prosecna_ocena_II ,
                                                      ISPIT [ i ].prosecna_ocena_III );

                                                        for( k = 0 ; k< 137; k++) { printf("_"); }
                                                        printf("\n");
        }
    for ( i = 1 ; i < n ; i++)
            {
                for ( j = 0 ; j < n-i ; j++)
                    {
                        if ( ISPIT [ j ].prosecna_ocena_III < ISPIT [ j+1 ].prosecna_ocena_III && ISPIT [ j ].godina_upisa == ISPIT [ j+1 ].godina_upisa)
                            {
                                a= ISPIT [ j ] ;
                                ISPIT [ j ] = ISPIT [ j+1 ] ;
                                ISPIT [ j+1 ] = a ;
                            }
                    }
            }

    system("pause");
    system("cls");

    printf("\n\n") ;
    printf("Posle sortiranja po prosecnoj oceni u opadajucem poretku \n\n");
    for( k = 0 ; k < 137; k++) { printf("=") ; } printf("\n");
    printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |\n", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
    for( k = 0 ; k < 137; k++) { printf("=") ; }
    printf("\n");

    for(i=0;i<n;i++)
        {
            printf("\n");
            printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |\n",
                                                      ISPIT [ i ].broj_indeksa,
                                                      ISPIT [ i ].godina_upisa,
                                                      ISPIT [ i ].ime_studenta,
                                                      ISPIT [ i ].prezime_studenta,
                                                      ISPIT [ i ].prosecna_ocena_I,
                                                      ISPIT [ i ].prosecna_ocena_II ,
                                                      ISPIT [ i ].prosecna_ocena_III );

                                                        for( k = 0 ; k< 137; k++) { printf("_"); }
                                                        printf("\n");
        }
system("pause");
return 0;
}

我终于做到了!尼克S,你的回答对我很有帮助。这是想要做的。

© www.soinside.com 2019 - 2024. All rights reserved.