Lỗi khởi tạo biến bị bỏ qua bởi switch case default?

không hiểu tại sao lỗi này lại xuất hiện cơ chế nó như thế nào ? ai giải thích giùm với

Thiếu break ở case kìa, không có break thì nó sẽ nhảy luôn xuống các case dưới và cuối cùng là rơi vào default

1 Like

break càng lỗi nhiều hơn anh ak , bị cái này hoài không hiểu sao nữa hix

Em không post code mà chụp hình nên anh không nhìn thấy, em không thể khai báo biến trong switch case được.

Em phải khai báo ở ngoài cái switch ấy, đây là khái niệm về scope, em cần phải nắm.

nên khai báo ra ngoài , nếu lát em muốn cũng sử dụng biến k thì sao hả anh , có cách nào hay hơn k anh

Lát nữa là lúc nào? Em khai báo trước cái switch ấy, cách này có gì mà không hay?

void main() {
    int a[maxdong][maxcot], n, m;
    cout << "nhap so dong :" << endl;
    cin >> n;
    cout << "nhap so cot :" << endl;
    cin >> m;
    nhapmang(a, n, m);
    xuatmang(a, n, m);
    // nhap so

nhapk: {
        int k;
        cout << "nhap k" << endl;
        cin >> k;
    }
    do {
        int sobai;
        cout << "nhap so bai : \n ";
        cin >> sobai;
        switch (sobai) {

        case 1:
            cout << "tong cot k " << sumcotk(a, n, m ,2) <<endl;
            break;
        case 2:
            cout << "so lon nhat trong mang : " << timmax(a, n,m) << endl;
        case 3:
            goto nhapk;
            cout << "so lon nhat trong cot " << k << ':' << tim_sln_trong_cot(a, n, m, k);
            break;
        default:
            cout << "lua chon sai nhan esc de thoat " << endl;
            break;
        }
    } while (_getch() != 27);

    system("pause");
}

em làm vậy ổn không anh

Lỗi này có giải thích khá kỹ ở đây: http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement
Cách sửa thì rất đơn giản là

case n : {
//code
}
1 Like

tiếng anh , em ngại lắm tiếng anh

giúp em với em không biết giải quyết thế nào

Mình có ghi cách giải quyết ở trên rồi mà @_@

Còn vì sao thì do lúc khai báo biến, C/C++ nó lôi cổ ra khai báo ở đầu chương trình hết sau đó mới đi gán giá trị.
Thì bạn làm vậy vô tình bỏ qua bước gán giá trị cho k.

Ví dụ từ stackoverflow

switch (i)
{
   case 0:
     int j; // biến j lúc này đc khai báo nhưng ko có giá trị rõ ràng
     j = 0; // 'j đc khởi tạo = 0, nhưng bị bỏ qua khi i = 1
     break;
   case 1:
     ++j;   // 'j' vẫn tồn tại ở đây, nhưng ko có giá trị -> hú lỗi
     break;
}

Ngoài ra, nếu bạn làm như thế này cũng bị hú nè

goto _label
int j = 0;
_label:
3 Likes

ok cám ơn bạn mình giải quyết đc rồi

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