30/09/2018, 16:16
Không thể nhập giá trị vào struct?
Do hôm nay em nghỉ học phần cấu trúc nên em đọc lại bài giảng vẫn không hiểu lắm.Em thử làm bài tập đề thế này : Định nghĩa cấu trúc điểm gồm các thành phần(Điểm miệng,15 phút,1 tiết,học kỳ,điểm tb).Viết chương trình nhập và in thông tin điểm trong đó điểm tb =(đmiệng+đ15+2đ1t+3đhk)/7.Trong đó việc nhập và in thông tin được viết thành 1 hàm.
Bài của em :
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
float dm,d15,d1t,dhk,dtb;
} diem;
void nhapdiem( diem d)
{
printf("Nhap diem mieng :
");
scanf("%f",&d.dm);
printf("Nhap diem kiem tra 15 phut :
");
scanf("%f",&d.d15);
printf("Nhap diem 1 tiet :
");
scanf("%f",&d.d1t);
printf("Nhap diem hoc ky :
");
scanf("%f",&d.dhk);
d.dtb = (d.dm + d.d15 + 2*d.d1t + 3*d.dhk)/7;
}
void indiem(diem d)
{
printf("Diem mieng la :%f
",d.dm);
printf("Diem 15 phut la :%f
",d.d15);
printf("Diem 1 tiet la :%f
",d.d1t);
printf("Diem hoc ky la :%f
",d.dhk);
printf("Diem trung binh la : %f ",d.dtb);
}
int main()
{
diem d;
nhapdiem(d);
system("cls");
indiem(d);
return 0;
}
Chạy điểm toàn bị lỗi.Mong mọi người giúp em.
Bài liên quan
KHông biết sao em viết mấy cái thư viện lại bị lỗi thế kia
Em xem cách hướng dẫn post code ở đây.
Về phần code, khi em nhập struct vào, và em muốn sủa struct đó thì em phải dùng con trỏ. Anh sửa lại bài của em như thế này:
Lỗi của e xảy ra vì e chưa khởi tạo giá trị ban đầu trước khi sử dụng đối với biến
d
. Nếu e không muốn dùng con trỏ thì e làm thế này Nếu a k nhầm thì struct trong C/C++ là kiểu giá trị, e nhạp thì e phải truyền tham biến chứ nhỉ :Câu này @Su_Su hỏi C mà, C không có & đâu @tuancoi2506.
zị ah a? we quá chạy luôn :running: .
người ta hỏi mà các chú cứ thay nhau chạy là sao :trollface: @ltd @tuancoi2506
Khó quá chạy trước cho chắc =))
Anh @ltd cho em hỏi với.Trong đoạn code thầy giáo em đưa có 1 đoạn thế này.
Em không hiểu chỗ> scanf("%*c") có nghĩa là gì?
Trong khi đó thầy vẫn sử dụng & (void nhapDiem(Diem &d)). Mà trong khi đó anh có nói là trong C không có &.Em thực sự không hiểu…
Cái này có nghĩa là đọc vào một ký tự, nhưng bỏ đi. Không lưu vào trong biến nào cả. Mục đích của lệnh này là để bỏ đi một ký tự cuối.
Trong C không có &. Thầy em đang sử dụng khái niệm reference hay còn gọi là tham chiếu của C++. IDE của thầy em đang dùng là gì? Project thầy em tạo ra là C++ hay C?
Em thử tạo một project C. Và viết hàm
void nhapDiem(Diem &d)
thì sẽ nhận có báo lỗi ngay.Lỗi trong code của bạn thì anh Đạt đã chỉ rõ ra rồi.Nếu bạn học C thì mình sửa lại như thế này.
Cảm ơn @14520054 nhé.Mình hiểu rồi!!!
@Su_Su anh đã nói em là nên dùng con trỏ giống anh @ltd rồi mà.Khi dùng đối số đầu ra hàm này sẽ phải copy giá trị cho biến cần nhập nên khi chạy sẽ mất thời gian và stack hơn cách dùng đối con trỏ.
Em muốn hiểu thêm ở chổ khi gọi hàm nhập điểm nhapdiem(&d), và khi gọi định nghĩa hàm void nhapdiem(diem*){//…}, ở bước nhập scanf("%f", &d->dm); tại sao không thể nhập scanf("%f", d.dm) như thông thường? em cảm ơn