Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Chèn vào 1 loạt các sinh viên để tạo 1 danh sách các sinh viên. Lỗi khi chạy code ??

  1. #1
    Ngày gia nhập
    04 2018
    Nơi ở
    Đà Lạt
    Bài viết
    0

    Mặc định Chèn vào 1 loạt các sinh viên để tạo 1 danh sách các sinh viên. Lỗi khi chạy code ??

    Code:
    // Chèn các tập tin thư viện có sẵn
    
    #include<iostream>
    #include<conio.h>
    #include<iomanip>
    #include<string.h>
    
    using namespace std;
    
    #define MAX 100
    struct SV			// Khai báo chuỗi cấu trúc sinh viên
    {
    	char maSV[7];
    	char hoTen[27];
    	unsigned int namSinh;
    	char lop[10];
    	double diemTB;
    };
    
    // Khai báo nguyên mẫu hàm
    
    void Chen_1SV(SV a[MAX], int &n, char maSV[7], char hoTen[27], unsigned int namSinh, char lop[10], double diemTB);
    void TaoDanhSach_SV(SV a[MAX], int &n);
    
    int main()
    {
    	int n;
    	SV a[MAX];
    
    	TaoDanhSach_SV(a, n);		// Gọi hàm tạo danh sách sinh viên
    
    	_getch();
    	return 1;
    }
    
    void Chen_1SV(char maSV[7], char hoTen[27], unsigned int namSinh, char lop[10], double diemTB, SV a[MAX], int &n)
    {
    	if (n < MAX)
    	{
    		strcpy_s(a[n].maSV, 7, maSV);
    		strcpy_s(a[n].hoTen, 27, hoTen);
    		a[n].namSinh = namSinh;
    		strcpy_s(a[n].lop, 10, lop);
    		a[n].diemTB = diemTB;
    
    		n++;
    	}
    }
    
    void TaoDanhSach_SV(SV a[MAX], int &n)
    {
    	n = 0;
    	Chen_1SV("1534507", "Duong Qua", 1997, "CTK39", 9, a, n);
    	Chen_1SV("1405507", "Tu Ma Ngoc Yen", 1996, "CTK38", 6.5, a, n);
    	Chen_1SV("1334067", "Quach Tinh", 1996, "CTK37", 8, a, n);
    	Chen_1SV("1300167", "Hoang Dung", 1995, "CTK37", 7.2, a, n);
    	Chen_1SV("1534507", "Lan Xung", 1997, "CTK39", 4, a, n);
    	Chen_1SV("1405507", "Hoang Dung", 1996, "CTK38", 8.5, a, n);
    	Chen_1SV("1334067", "Vuong Ngoc Yen", 1995, "CTK38", 7, a, n);
    	Chen_1SV("1334167", "Lenh Ho Xung", 1995, "CTK37", 5.6, a, n);
    	Chen_1SV("1530070", "Trieu Minh", 1997, "CTK39", 3, a, n);
    	Chen_1SV("1534123", "Nhac Dung", 1997, "CTK39", 2, a, n);
    	Chen_1SV("1534456", "Ha Thai Xung", 1997, "CTK39", 6, a, n);
    	Chen_1SV("1512307", "Vy Tieu Bao", 1997, "CTK39", 5, a, n);
    	Chen_1SV("1400067", "Chau Ba Thong", 1996, "CTK38", 6.5, a, n);
    	Chen_1SV("1530000", "Cong Tang Ton Nu Thu Huong", 1997, "CTK39", 8, a, n);
    	Chen_1SV("1401234", "Ton That Du", 1996, "CTK38", 9.5, a, n);
    	Chen_1SV("1434167", "Doan Du", 1996, "CTK38", 5.6, a, n);
    	Chen_1SV("1333217", "Hoang Trong Yen", 1995, "CTK37", 7, a, n);
    	Chen_1SV("1531117", "Au Duong Phong", 1997, "CTK39", 5.5, a, n);
    }
    Mình đang học C++, phần chuỗi cấu trúc.
    Khi mình build thì không thấy xuất hiện lỗi gì, nhưng khi ấn F5 chạy chương trình thì xuất hiện cửa sổ báo lỗi như sau

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		error.JPG
Lần xem:	6
Size:		58.8 KB
ID:		61606

    Vậy cho hỏi mình đã sai chỗ nào ??
    Ae giúp mình với

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    867

    Một chuỗi ascii, ví dụ "1534507", sẽ cần 8 bytes trong bộ nhớ để lưu trữ, trong khi bạn khai báo vùng nhớ chứa nó chỉ có 7 bytes, nên xảy ra lỗi tràn vùng nhớ. Sửa lại khai báo, sửa đối số hàm và chiều dài trong lệnh strcpy_s sẽ nết lỗi này. Tuy nhiên về lâu dài khi bạn học qua con trỏ và cấp phát động hay C++, bạn sẽ viết khác ngay thôi.

  3. #3
    Ngày gia nhập
    04 2018
    Nơi ở
    Đà Lạt
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Một chuỗi ascii, ví dụ "1534507", sẽ cần 8 bytes trong bộ nhớ để lưu trữ, trong khi bạn khai báo vùng nhớ chứa nó chỉ có 7 bytes, nên xảy ra lỗi tràn vùng nhớ. Sửa lại khai báo, sửa đối số hàm và chiều dài trong lệnh strcpy_s sẽ nết lỗi này. Tuy nhiên về lâu dài khi bạn học qua con trỏ và cấp phát động hay C++, bạn sẽ viết khác ngay thôi.
    Thế mà mình cứ nghĩ mã sinh viên đó chỉ có 7 bytes.. Cảm ơn bạn nhiều nhiều..

    - - - Nội dung đã được cập nhật ngày 21-05-2018 lúc 05:52 PM - - -

    Vậy bạn cho mình hỏi thêm với.
    Mình thêm vào đoạn code trên 1 hàm xét điểm trung bình của từng học sinh rồi chép nó vào xếp loại học lực. Nhưng khi mình chạy thì nó vẫn không thực hiện. Mình không hiểu lắm
    Code hàm của mình đây :
    Code:
    void Xet_XLHL(SV a[MAX], int n)
    {
    	int i;
    	for (i = 0; i < n; i++);
    	{
    		if (8.5 <= a[i].diemTB && a[i].diemTB <= 10)
    			strcpy_s(a[i].xepLoai, 5, "GIOI");
    		else if (7 <= a[i].diemTB && a[i].diemTB <= 8.5)
    			strcpy_s(a[i].xepLoai, 5, "KHA");
    		else if (5.5 <= a[i].diemTB && a[i].diemTB <= 7)
    			strcpy_s(a[i].xepLoai, 5, "TB");
    		else if (4 <= a[i].diemTB && a[i].diemTB <= 5.5)
    			strcpy_s(a[i].xepLoai, 5, "YEU");
    		else strcpy_s(a[i].xepLoai, 5, "KEM");
    	}
    }
    Khi cho biên chạy chương trình:
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Cmd.JPG
Lần xem:	6
Size:		99.6 KB
ID:		61616

  4. #4
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    867

    Có thể là vấn đề với so sánh số thực xem thêm : http://diendan.congdongcviet.com/thr...ht=#post923424. từ #8 trở đi

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn