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;
}
Bài liên quan
Hiện ra đống gì là sao, bạn có thể cho xem luôn được không?
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
Bạn chưa nhập n trong hàm main.
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
Dòng
Xuat(SV, n);
theo mình bạn phải đặt nó ở trong hàmNhap(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àmXuat
thôi. Sau khi chạy xong hàmXuat
, “bản sao” này sẽ bị xóa đi.Do đó, khi gọi hàm
xuất
ở trongmain()
, 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…