01/10/2018, 00:37

Lỗi chương trình chạy không dừng

Đề bài là: tạp danh sách sinh viên gồm có điểm toán , lý , hóa , và điểm trung bình
( nó bị lỗi khi mà chạy xong chương trình rồi không dừng ạ , và nó hiện ra một đống gì gì trên màn hình ấy )

#include <stdio.h>
#include<conio.h>
#include<string.h>
#define N 100

 typedef struct {
char Hoten[30];
float toan, ly,hoa, DTB;
}sinhvien;
// Nhập vào danh sách sinh viên
void Nhap(sinhvien a[], int n)
{
int i;
do{
    printf("nhap so phan tu cua mang:");
    scanf("%d",&n);
    if(n<0 || n>N){
        printf("ban nhap khong hop le");

        }
    }while (n<0 || n>N);

    for(i=1;i<=n;i++)
    {
        printf(" nhap ho ten sinh vien %d : ",i);
        fflush(stdin); // xóa sạch bộ nhớ đệm bàn phím nhập trước
        gets(a[i].Hoten);

        printf(" diem toan: ");
        fflush(stdin);
        scanf("%f", &a[i].toan);

        printf(" diem ly: ");
        fflush(stdin);
        scanf("%f",&a[i].ly);

        printf(" diem hoa: ");
        fflush(stdin);
        scanf("%f", &a[i].hoa);

        a[i].DTB = (a[i].toan + a[i].ly + a[i].hoa)/3;
    }
}
// xuất danh sách

void Xuat(sinhvien a[], int n)
{
int i;
printf("------------------- Dach sinh vien----------------
");
printf("
 %-30s %-10s %-10s %-10s %-10s", "Ho ten"," Toan", " Ly", " hoa", "DTB
" );

for(i=1; i<= n; i++){
    printf("%-30s %-10.f %-10.f %-10.f %-10.f
", a[i].Hoten , a[i].toan , a[i].ly , a[i].hoa, a[i].DTB);
}
}
// hàm chính
int main()
{
int n;
sinhvien sv[N];

Nhap(sv, n);
Xuat(sv, n);

   // getch();
//return 0;
}
Nguyễn Xuân Phúc viết 02:39 ngày 01/10/2018

Hiện ra đống gì là sao, bạn có thể cho xem luôn được không?

Nguyễn Xuân Phúc viết 02:45 ngày 01/10/2018

void Nhap(sinhvien a[], int n)

bạn truyền như vậy thì giá trị đọc trong hàm Nhap đâu được lưu vào biến n ngoài hàm main đâu

viết 02:39 ngày 01/10/2018

Bạn chưa nhập n trong hàm main.

Nguyễn Xuân Phúc viết 02:48 ngày 01/10/2018

xét về cấu trúc thì nhập n nằm trong đó là đúng rồi.
Vấn đề là ở cách truyền tham số vào hàm thôi

Vũ Quốc Phong viết 02:42 ngày 01/10/2018

Dòng Xuat(SV, n); theo mình bạn phải đặt nó ở trong hàm Nhap(SV, n) vì giá trị người dùng nhập vào chỉ làm thay đổi giá trị “bản sao” của n trong hàm Xuat thôi. Sau khi chạy xong hàm Xuat, “bản sao” này sẽ bị xóa đi.
Do đó, khi gọi hàm xuất ở trong main(), n vẫn mang giá trị rác.
P.s: Bạn có thể xem các bài hướng dẫn về hàm, tầm vực của biến,v… v…

Bài liên quan
0