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 << "\nYour choose(1 -> 6): ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, Choose);
	if (Choose != "1" && Choose != "2" && Choose != "3" && Choose != "4" && Choose != "5" && Choose != "6")
	{
		std::cout << "\nLua chon cua ban khong hop le\n";
		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 << "\nNhap so thu 1: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s1);
	std::cout << "\nNhap so thu 2: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s2);
	std::string s3 = s1 + s2;
	std::cout << "\nKet qua tong = " << s3 << std::endl;
	std::string Choose2;
	std::cout << "\nBan muon:\n";
	std::cout << "\n1. Return Menu.\n";
	std::cout << "\n2. Continue.\n";
	std::cout << "\n3. Exit Program.\n";
	if (Choose2 == "1")
	{
		goto MENU;
	}
	else if (Choose2 == "2")
	{
		goto STT1;
	}
	else if (Choose2 == "3")
		exit(0);
STT2:
	std::string s4, s5;
	std::cout << "\nNhap so thu 1: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s4);
	std::cout << "\nNhap so thu 2: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s5);
	std::string s6 = s4 + s5;
	std::cout << "\nKet qua hieu = " << s6 << std::endl;
	std::string Choose3;
	std::cout << "\nBan muon:\n";
	std::cout << "\n1. Return Menu.\n";
	std::cout << "\n2. Continue.\n";
	std::cout << "\n3. Exit Program.\n";
	if (Choose3 == "1")
	{
		goto MENU;
	}
	else if (Choose3 == "2")
	{
		goto STT2;
	}
	else if (Choose3 == "3")
		exit(0);
STT3:
	std::string s7, s8;
	std::cout << "\nNhap so thu 1: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s7);
	std::cout << "\nNhap so thu 2: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s8);
	std::string s9 = s7 + s8;
	std::cout << "\nKet qua tich = " << s9 << std::endl;
	std::string Choose4;
	std::cout << "\nBan muon:\n";
	std::cout << "\n1. Return Menu.\n";
	std::cout << "\n2. Continue.\n";
	std::cout << "\n3. Exit Program.\n";
	if (Choose4 == "1")
	{
		goto MENU;
	}
	else if (Choose4 == "2")
	{
		goto STT3;
	}
	else if (Choose4 == "3")
		exit(0);
STT4:
	std::string s10, s11;
	std::cout << "\nNhap so thu 1: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s10);
	std::cout << "\nNhap so thu 2: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s11);
	std::string s12 = s10 + s11;
	std::cout << "\nKet qua thuong = " << s12 << std::endl;
	std::string Choose5;
	std::cout << "\nBan muon:\n";
	std::cout << "\n1. Return Menu.\n";
	std::cout << "\n2. Continue.\n";
	std::cout << "\n3. Exit Program.\n";
	if (Choose5 == "1")
	{
		goto MENU;
	}
	else if (Choose5 == "2")
	{
		goto STT4;
	}
	else if (Choose5 == "3")
		exit(0);
STT5:
	std::string s13;
	std::cout << "\nNhap vao thua so: ";
	while (getchar() != '\n' && getchar() != EOF) {}
	getline(std::cin, s13);
	std::string s14 = s13;
	std::cout << "\nKet qua giai thua = " << s14 << std::endl;
	std::string Choose6;
	std::cout << "\nBan muon:\n";
	std::cout << "\n1. Return Menu.\n";
	std::cout << "\n2. Continue.\n";
	std::cout << "\n3. Exit Program.\n";
	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 :slight_smile:

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 :smiley:

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

2 Likes

Tức là phải làm như thế này compiler nó mới không la làng hả anh ?

int main()
{
      int x = 10;
      goto Label1;
Label1:
{
      int y; // Ok, now will has no problems ?
}
      system("pause");
      return 0;
}

ukm, đặt hết vào trong block đi

1 Like

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)

1 Like

trong switch case cũng vậy đó, ngay sau dấu : ở case cũng không được khai báo biến.

1 Like

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 …:grinning:

2 Likes

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 :smiley:

2 Likes

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ái abcd() ấ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

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