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

Đề tài: Lỗi khi sử dụng Switch

  1. #1
    Ngày gia nhập
    04 2017
    Bài viết
    0

    Mặc định Lỗi khi sử dụng Switch

    Mình có code sau:
    Code:
    switch(a)
    	{
    	case 1:string newID; cout << "Nhap ma Sv moi: "; getline(cin, newID); ID.replace(0, newID.length(), newID); break;
    	case 2:string newten; cout << "Nhap ten SV moi: "; getline(cin, newten); ten.replace(0, newten.length(), newten); break;
    	case 3:float newmid; cout << "Nhap diem giua ky moi: "; cin >> newmid; mid = newmid; break;
    	case 4:float newend; cout << "Nhap diem cuoi ky moi: "; cin >> newend; end = newend; break;
    	}
    Chạy thì trình biên dịch báo lỗi: "transfer of control bypasses initialization of"(mình dùng Visual Studio 2015). Mình tìm hiểu thì hình như vấn đề nằm ở chỗ khai báo biến trong case, sau khi sửa lại thành:
    Code:
    switch (a)
    	{
    	case 1: {string newID; cout << "Nhap ma Sv moi: "; getline(cin, newID); ID.replace(0, newID.length(), newID); break; }
    	case 2: {string newten; cout << "Nhap ten SV moi: "; getline(cin, newten); ten.replace(0, newten.length(), newten); break; }
    	case 3:float newmid; cout << "Nhap diem giua ky moi: "; cin >> newmid; mid = newmid; break;
    	case 4:float newend; cout << "Nhap diem cuoi ky moi: "; cin >> newend; end = newend; break;
    	}
    thì đã chạy bình thường. Mình thắc mắc là tại sao chỉ bị lỗi case 1 và 2, case 3 và 4 thì không sao?

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,476

    Lần sau thớt google cái lỗi. https://stackoverflow.com/questions/5136295/switch-transfer-of-control-bypasses-initialization-of-when-calling-a-function

    Mục 6.7 chuẩn C++ có nội dung như sau: Chương trình không được nhảy qua khai báo của một đối tượng: nhảy từ chỗ một đối tượng chưa vào scope đến chỗ mà đối tượng ấy đã có scope là bị cấm, trừ phi đối tượng ấy là POD [1] và không được khởi tạo. <hết trích> Local scope được giới hạn bằng ngoặc nhọn.

    [1] kiểu dữ liệu đơn giản (Plain Old Data), bao gồm primitive types. Có vai trò bình đẳng với struct của C.
    Đã được chỉnh sửa lần cuối bởi prog10 : 20-08-2017 lúc 09:11 PM.

  3. #3
    Ngày gia nhập
    04 2017
    Bài viết
    0

    À như vậy kiểu float là POD nên không bị báo lỗi, thanks, mình hiểu rồ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