01/10/2018, 10:24
Danh sách chỉ hiện 2 người
ai tìm giúp mình lỗi sai của bài này với. lúc hiện chỉ hiện ra danh sách có 2 người thôi
#include"stdio.h"
#include"conio.h"
#include<string.h>
struct sinhvien
{
char masv[5];
char hoten[30];
int namsinh;
char gioitinh[5];
float diemtb;
};
void Nhap(sinhvien ds[], int n)
{
int i,namsinh;
float diemtb;
printf("
Nhap so sinh vien: "); scanf("%d",&n);
for(i=0;i<n;i++)
{
fflush(stdin);
printf("
Sinh vien thu %d",i+1);
printf("
Nhap ma sinh vien: "); gets(ds[i].masv);
fflush(stdin);
printf("
Nhap ho va ten sinh vien: "); gets(ds[i].hoten);
fflush(stdin);
printf("
Nhap Nam sinh: "); scanf("%d",&ds[i].namsinh);
fflush(stdin);
printf("
Nhap gioi tinh: "); gets(ds[i].gioitinh);
fflush(stdin);
printf("
Nhap diem trung binh: "); scanf("%f",&ds[i].diemtb);
fflush(stdin);
}
//return n;
}
void Hien(sinhvien ds[], int n)
{
int i;
printf("
%10s %20s %10s %8s %10s ","MaSV","Ho Ten","Nam Sinh","Gioi tinh","Diem trung binh");
for(i=0;i<n;i++)
{
printf("
%10s %20s %10d %8s %10f",ds[i].masv,ds[i].hoten,ds[i].namsinh,ds[i].gioitinh,ds[i].diemtb);
}
}
int main()
{
int n;
sinhvien ds[50];
Nhap(ds,n);
Hien(ds,n);
// timnu(ds,n);
// dem(ds,n);
}
Bài liên quan
Biến
n
bạn khai báo ở hàmmain
chưa có giá trị. Do đó bạn đưa vào hàmNhap
để yêu cầu người dùng nhập vào và dựa vào biếnn
này bạn nhập danh sách học sinh. Và đương nhiên nó cũng thành công. Tuy nhiên một điều là biếnn
ở đây bạn vừa mới nhập cho nó giá trị thì nó chỉ có giá trị trong hàmNhap
thôi. Khi kết thúc hàmNhap
và trở về hammain
biến n của bạn vẫn là một biến với giá trị rác. Và sau đó khi bạn đi hàmHien
thì nó là một số n như thuở ban đầu ở hàmmain
chứ không phải là biếnn
ở hàm NhậpDo đó việc bạn không hiên một chuẩn xác được số lượng sinh viên là điều đươn nhiên.
Edit: Để khắc phục được điều này, bạn phải dùng con trỏ để có thể giữ được giá trị của mình khi nhập trong hàm
Nhap
hoặc một cách đơn giản hơn đó chính là đưa việc nhậpn
ra ở hàmmain
Mình cảm ơn nhé. loay hoay tìm mãi k ra
Thớt về ôn lại tham trị với tham biến