对齐结构数组以制作表格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对齐结构数组以制作表格相关的知识,希望对你有一定的参考价值。
我需要使用一组结构创建一个表,但是我遇到了一个问题,除了在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("
");
for( i= 0 ; i < n ; i++)
{
printf("Uneti podatke za studenta broj %d
" , i+1) ;
printf("Broj indeksa :
") ;
scanf("%d", &ISPIT[ i ].broj_indeksa) ;
printf("Godina upisa :
") ;
scanf("%d" , &ISPIT[ i ].godina_upisa) ;
printf("Ime :
") ;
scanf("%s", &ISPIT[ i ].ime_studenta) ;
printf("Prezime :
") ;
scanf("%s" , &ISPIT[ i ].prezime_studenta );
printf("Prosecna ocena u prvoj godini :
") ;
scanf("%f" , &ISPIT[ i ].prosecna_ocena_I );
printf("Prosecna ocena u drugoj godini :
") ;
scanf("%f" , &ISPIT[ i ].prosecna_ocena_II );
printf("Prosecna ocena u trecoj godini :
") ;
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("
");
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("
");
}
return 0;
}
我的问题是:如何在不使用除标准库之外的任何库的情况下使用表格查看结构数组?
答案
您可以将printf与left-justify标志( - )一起使用。
printf("%-25s%-20s%-15s%-15s%-15s%-15s%-15s
", "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
", 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);
}
另一答案
#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("
");
// UCITAVANJE POJEDINACNIH PODATAKA ZA STUDENTA
for( i= 0 ; i < n ; i++)
{
printf("Uneti podatke za studenta broj %d
" , i+1) ;
printf("Broj indeksa :
") ;
scanf("%d", &ISPIT[ i ].broj_indeksa) ;
printf("Godina upisa :
") ;
scanf("%d" , &ISPIT[ i ].godina_upisa) ;
printf("Ime :
") ;
scanf("%s", &ISPIT[ i ].ime_studenta) ;
printf("Prezime :
") ;
scanf("%s" , &ISPIT[ i ].prezime_studenta );
printf("Prosecna ocena u prvoj godini :
") ;
scanf("%f" , &ISPIT[ i ].prosecna_ocena_I );
printf("Prosecna ocena u drugoj godini :
") ;
scanf("%f" , &ISPIT[ i ].prosecna_ocena_II );
printf("Prosecna ocena u trecoj godini :
") ;
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("
");
for( k = 0 ; k < 137; k++) { printf("=") ; } printf("
");
printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |
", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
for( k = 0 ; k < 137; k++) { printf("=") ; }
printf("
");
for(i=0;i<n;i++)
{
printf("
");
printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |
",
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("
");
}
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("
") ;
printf("Posle sortiranja po godini upisa u opadajucem poretku
");
for( k = 0 ; k < 137; k++) { printf("=") ; } printf("
");
printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |
", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
for( k = 0 ; k < 137; k++) { printf("=") ; }
printf("
");
for(i=0;i<n;i++)
{
printf("
");
printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |
",
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("
");
}
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("
") ;
printf("Posle sortiranja po prosecnoj oceni u opadajucem poretku
");
for( k = 0 ; k < 137; k++) { printf("=") ; } printf("
");
printf("| %-15s | %-15s | %-15.15s | %-25.25s | %-15s | %-15s | %-15s |
", "Broj Indeksa", "Godina Upisa", "Ime", "Prezime", "Ocena I", "Ocena II", "Ocena III");
for( k = 0 ; k < 137; k++) { printf("=") ; }
printf("
");
for(i=0;i<n;i++)
{
printf("
");
printf("| %-15d | %-15d | %-15.15s | %-25.25s | %-15.1f | %-15.1f | %-15.1f |
",
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("
");
}
system("pause");
return 0;
}
我终于做到了!尼克S,你的回答对我很有帮助。这是想要做的。
以上是关于对齐结构数组以制作表格的主要内容,如果未能解决你的问题,请参考以下文章