30/09/2018, 16:08
Lỗi cú pháp khi sử dụng cấu trúc tự trỏ và danh sách liên kết
Code của mình thực hiện yêu cầu:Viết chương trình quản lí họ tên và điểm thi học kì và in ra danh sách các học sinh thi lại.(có điểm trung bình<5.0)
Khi build thì không có lỗi nhưng khi chạy thì lại có thông báo dừng chương trình do một nguyên nhân nào đó. Nhờ mọi người fix lại giúp mình.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
typedef struct hoc_sinh {
char ho_ten[20];
float diem;
struct hoc_sinh *tiep;
} sv_1;
sv_1 *hoc_sinh1=NULL,*hoc_sinh2=NULL;
char name[20];
float diem1;
int n=0;
do {
hoc_sinh1=(sv_1*)malloc(sizeof(sv_1));
if(hoc_sinh1==NULL)
printf("Khong du bo nho de cap phat");
else {
printf("Ho va ten:");
fflush(stdin);
gets(name);
if(strcmp(name,"")!=0) {
strcpy(hoc_sinh1->ho_ten,name);
printf("diem:");
scanf("%f",&diem1);
hoc_sinh1->diem=diem1;
if(n==0)
hoc_sinh2=hoc_sinh1;
hoc_sinh1=hoc_sinh1->tiep;
}
}
}
while(strcmp(name,"")!=0);
printf("danh sach cac hoc sinh thi lai.
");
while(hoc_sinh2!=NULL) {
if((hoc_sinh2->diem)<5.0)
printf("%d %s %.1f",n+1,hoc_sinh2->ho_ten,hoc_sinh2->diem);
hoc_sinh2=hoc_sinh2->tiep;
}
return 0;
}
Bài liên quan
@14520054 nhập dữ liệu vào như thế nào mà có lỗi, anh làm tới gần 10 người mà có lỗi gì đâu?
Chú ý điểm này, em không nên đặt tên không có nghĩa như sau:
Em viết code trong code block,rồi nhập input bình thường.Nó vẫn in danh sách học sinh thi lại nếu có rồi có thêm 1 thông báo: có 1 vấn đề là nguyên nhân kết thúc chương trình của bạn hiện tại.
Ủa anh đâu thấy thông báo gì đâu?
A problem caused the program to stop working correctly.Windows will does the program and notify you if a solution is available
Anh không thấy lỗi này, nhưng anh thấy chương trình em có một điểm có thể gây ra lỗi này. Đó là em cấp phát vùng nhớ cho
hoc_sinh1
nhưng không hủy nó đi.Em cho anh xem hình chụp màn hình lúc em bị lỗi xem. Cho anh xem cả console lúc đấy, xem nó in ra được cái gì.
Trường hợp này khó debug quá
Em thử thêm
free(hoc_sinh2);
như dưới xem.mình để ý thấy n của bạn chưa có tăng khi mà nhập 1 học sinh mới, ko bik đúng ko
Dựa vào gợi ý của anh em mới fix lại được rồi nek, chạy ngon, Nhưng em muốn nhờ anh test lại thử có cách nào ngắn hơn không?
Vậy em có tìm được lý do không?
Mà sao em malloc mà không free đi, về sau có hại lắm đấy.
Do mới nghĩ ra nên post lên cho anh coi thử, nên ko free. Lý do em hiểu muk sao khó viết ra quá.
Dù em có giải quyết được vấn đề thì em cũng phải nghên cứu free vùng nhớ em đã cấp đi.
Em
free
thế này đã ổn chưa anh Đạt?Em suy nghĩ thử là em tạo ra bao nhiêu sinhvien thì em phải hủy bấy nhiêu sinh viên. Anh chưa coi code em, sinhvien1,sinhvien2 nhức đầu quá