30/09/2018, 18:21

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

Mai Anh Dũng viết 20:26 ngày 30/09/2018

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

trun viết 20:28 ngày 30/09/2018

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

Mai Anh Dũng viết 20:34 ngày 30/09/2018

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.

Thêm một video hay nữa từ khóa học Android for beginners
trun viết 20:28 ngày 30/09/2018

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

Mai Anh Dũng viết 20:36 ngày 30/09/2018

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?

trun viết 20:33 ngày 30/09/2018
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

*grab popcorn* viết 20:26 ngày 30/09/2018

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
}
trun viết 20:28 ngày 30/09/2018

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

trun viết 20:37 ngày 30/09/2018

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

*grab popcorn* viết 20:33 ngày 30/09/2018

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:
trun viết 20:30 ngày 30/09/2018

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

Bài liên quan
0