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

Nguyễn Xuân Phúc viết 01:48 ngày 01/10/2018

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

Người bí ẩn viết 01:52 ngày 01/10/2018

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;
}
Nguyễn Xuân Phúc viết 01:59 ngày 01/10/2018

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

Người bí ẩn viết 01:52 ngày 01/10/2018

Yeah, ok rồi anh !

Nhưng mà tránh dùng goto đi

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)

Sáng Béo viết 01:49 ngày 01/10/2018

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

Hoàng Trung viết 01:55 ngày 01/10/2018

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 …

Ngô Doãn Tuấn viết 01:53 ngày 01/10/2018

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

viết 01:59 ngày 01/10/2018

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

Bài liên quan
0