30/09/2018, 23:44
Không tìm được lỗi trong 1 đoạn code đơn giản
Source code: http://codepad.org/SIcID3Q3
int main()
{
MENU:
std::string Choose;
std::cout << "
Your choose(1 -> 6): ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, Choose);
if (Choose != "1" && Choose != "2" && Choose != "3" && Choose != "4" && Choose != "5" && Choose != "6")
{
std::cout << "
Lua chon cua ban khong hop le
";
Sleep(1500);
goto MENU;
}
if (Choose == "1")
{
std::cout << "a";
goto STT1;
}
else if (Choose == "2")
{
std::cout << "a";
goto STT2;
}
else if (Choose == "3")
{
std::cout << "a";
goto STT3;
}
else if (Choose == "4")
{
std::cout << "a";
goto STT4;
}
else if (Choose == "5")
{
std::cout << "a";
goto STT5;
}
else if (Choose == "6")
exit(0);
STT1:
std::string s1, s2;
std::cout << "
Nhap so thu 1: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s1);
std::cout << "
Nhap so thu 2: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s2);
std::string s3 = s1 + s2;
std::cout << "
Ket qua tong = " << s3 << std::endl;
std::string Choose2;
std::cout << "
Ban muon:
";
std::cout << "
1. Return Menu.
";
std::cout << "
2. Continue.
";
std::cout << "
3. Exit Program.
";
if (Choose2 == "1")
{
goto MENU;
}
else if (Choose2 == "2")
{
goto STT1;
}
else if (Choose2 == "3")
exit(0);
STT2:
std::string s4, s5;
std::cout << "
Nhap so thu 1: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s4);
std::cout << "
Nhap so thu 2: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s5);
std::string s6 = s4 + s5;
std::cout << "
Ket qua hieu = " << s6 << std::endl;
std::string Choose3;
std::cout << "
Ban muon:
";
std::cout << "
1. Return Menu.
";
std::cout << "
2. Continue.
";
std::cout << "
3. Exit Program.
";
if (Choose3 == "1")
{
goto MENU;
}
else if (Choose3 == "2")
{
goto STT2;
}
else if (Choose3 == "3")
exit(0);
STT3:
std::string s7, s8;
std::cout << "
Nhap so thu 1: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s7);
std::cout << "
Nhap so thu 2: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s8);
std::string s9 = s7 + s8;
std::cout << "
Ket qua tich = " << s9 << std::endl;
std::string Choose4;
std::cout << "
Ban muon:
";
std::cout << "
1. Return Menu.
";
std::cout << "
2. Continue.
";
std::cout << "
3. Exit Program.
";
if (Choose4 == "1")
{
goto MENU;
}
else if (Choose4 == "2")
{
goto STT3;
}
else if (Choose4 == "3")
exit(0);
STT4:
std::string s10, s11;
std::cout << "
Nhap so thu 1: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s10);
std::cout << "
Nhap so thu 2: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s11);
std::string s12 = s10 + s11;
std::cout << "
Ket qua thuong = " << s12 << std::endl;
std::string Choose5;
std::cout << "
Ban muon:
";
std::cout << "
1. Return Menu.
";
std::cout << "
2. Continue.
";
std::cout << "
3. Exit Program.
";
if (Choose5 == "1")
{
goto MENU;
}
else if (Choose5 == "2")
{
goto STT4;
}
else if (Choose5 == "3")
exit(0);
STT5:
std::string s13;
std::cout << "
Nhap vao thua so: ";
while (getchar() != '
' && getchar() != EOF) {}
getline(std::cin, s13);
std::string s14 = s13;
std::cout << "
Ket qua giai thua = " << s14 << std::endl;
std::string Choose6;
std::cout << "
Ban muon:
";
std::cout << "
1. Return Menu.
";
std::cout << "
2. Continue.
";
std::cout << "
3. Exit Program.
";
if (Choose6 == "1")
{
goto MENU;
}
else if (Choose6 == "2")
{
goto STT5;
}
else if (Choose6 == "3")
exit(0);
system("pause");
return 0;
}
There are 40 errors :
Need helps from eveybody, thank you so much
P/S: Lúc giúp nói Tiếng Việt chứ đừng nói tiếng Anh nha, mình không hiểu gì đâu =)) Còn ở trên mình dùng Tiếng Anh để thay đổi không khí xíu thôi
Bài liên quan
https://msdn.microsoft.com/en-us/library/s6s80d9f.aspx
nói đơn giản là khi compile với /Za thì các biến không được khai báo sau goto statement
muốn khai báo sau goto statement thì phải đặt nó trong 1 khối lệnh được bao bởi cặp ngoặc nhọn.
Nhưng mà tránh dùng goto đi
Tức là phải làm như thế này compiler nó mới không la làng hả anh ?
ukm, đặt hết vào trong block đi
Yeah, ok rồi anh !
Anh có thể giải thích kỹ chỗ này xíu được không ạ ? Tức là những lý do ấy ! (Ngoài lý do là Goto nhảy lung tung nên có thể sẽ gặp lỗi)
trong switch case cũng vậy đó, ngay sau dấu
:
ở case cũng không được khai báo biến.Mình nghĩ là sử dụng goto dễ làm rối chương trình, làm chương trình không chạy theo mạch nhất định nên khi kiểm tra cũng gặp nhiều khó khăn hơn …
Mình nghĩ bạn nên hạn chế dùng goto vì nó làm tăng độ phức tạp của chương trình lên rất nhiều !
Sẽ có nhiều cách để xử lý không nhất thiết phải sử dụng goto
sao ko tách mấy phần goto đó ra thành cái
void abcd()
rồi tha hồ tung tăng trong cáiabcd()
ấy, goto nhảy lung tung chi để gặp lỗi vậyđoạn code nào lặp lại 2 lần hoặc hơn thì tách nó ra thành 1 hàm.
đoạn code nào cần giải thích nó làm gì thì tách nó ra thành 1 hàm