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
Lỗi khởi tạo biến bị bỏ qua bởi switch case default?
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
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
}
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:
ok cám ơn bạn mình giải quyết đc rồi