Hỏi về struct lồng nhau

Chào mọi người, em có viết chương trình nhập vào tọa độ hai điểm A và B. Tính độ dài đoạn AB, đây là đoạn code của em

http://codepad.org/1JELk1gk
còn đây là kết quả chạy dòng code của em


em chỉ cần nhập tọa độ của điểm A và B thôi nhưng nó lại bị nhập dư em không biết vì sao. Mong mọi người giúp đỡ, em xin cám ơn.

em để trên codepad thì nó in lỗi, để trong visual studio 17 thì nó vẫn chạy ạ. Em chỉ cần nhập tọa độ của hai điểm A và B thôi nhưng cái này nó đòi nhập 7 lần :frowning: .

Vấn đề nằm ở hàm main của bạn.
Khi bạn gọi hàm toadodoanthang(), trong toadodoanthang() đã gọi 2 lần hàm nhaptoado() rồi, nên trong main bạn gọi hàm nhaptoado() là sai.
Tham khảo cách sửa dưới đây:

void main()
{
	diem tg;
	//toado p;
	//nhaptoado(p);
	toadodoanthang(tg);
	xuattoado(tg);
}

Nói thêm, trong hàm scanf, bạn bỏ cái \n đi, vì khi nhập xong mình nhấn enter là nó tự xuống dòng rồi

scanf("%f", &p.x);
1 Like

vâng em xin cám ơn ạ. Vậy nếu để như cũ thì nó sẽ thực hiện thêm một lần hàm nhaptoado() trong hàm main() phải không ạ. Em xin cám ơn

Đúng rồi.

Nhập 1 toado mất 2 lần,
Nhập 1 diem mất 4 lần, (nên đổi tên diem thành doan thì hợp lý hơn)
cộng lại là 6 lần,
do cái scanf\n nên phải nhập vô ích thêm 1 lần nữa (lần nhập này chỉ để xuống dòng, không có xài)
đó là nguyên nhân của 7 lần nhập.
Sửa như comment của mình ở trên thì sẽ là 4 lần nhập bình thường.

2 Likes

Đúng ra phải đặt là struct đoạn thẳng thay vì diem (đọc ong cả đầu) :smiley: còn tọa độ là trừu tượng :slight_smile: cái {float x; float y;} mới là diem.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?