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);
}
Henry viết 12:29 ngày 01/10/2018

Biến n bạn khai báo ở hàm main chưa có giá trị. Do đó bạn đưa vào hàm Nhap để yêu cầu người dùng nhập vào và dựa vào biến n 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ến n ở đây bạn vừa mới nhập cho nó giá trị thì nó chỉ có giá trị trong hàm Nhap thôi. Khi kết thúc hàm Nhap và trở về ham main 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àm Hien thì nó là một số n như thuở ban đầu ở hàm main chứ không phải là biến n ở hàm Nhập

main() n = xxx // giá trị rác
Nhap() n = xxx
yêu cầu nhập n = 5
main() n = xxx // n vẫn giữ giá trị rác
Hien() n = xxx

Do đó 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ập n ra ở hàm main

Nguyễn Bảo viết 12:38 ngày 01/10/2018

Mình cảm ơn nhé. loay hoay tìm mãi k ra

rogp10 viết 12:36 ngày 01/10/2018

Thớt về ôn lại tham trị với tham biến

Bài liên quan
0