Lỗi khi chạy chương trình C có chương trình con

Chương trình dưới của e khi nhập lựa chọn 1 ra MENU 2 nhập tiếp số 1,2 hay 3 đều in ra màn hình xong và xuất hiện lỗi “has stopped working” còn nếu nhập 2,3 từ MENU đầu thì k sao. E dùng c-free 5.0

#include<stdio.h>
#include<conio.h>
void hammot();
void hamhai();
main()
{
	int k;
	printf("\tMENU\n======================================");
	printf("\n1. ham mot\n2. ham hai\n3. Ket thuc\nChon: ");
	scanf("%d",&k);
	switch(k)
	{
		case 1: hammot();
			break;
		case 2: hamhai();
			break;
		case 3: 
			break;
	}
	getch();
}
void hammot()
{
	char i;
	printf("\n\tMENU2\n======================================");
	printf("\n1. lua chon 1 \n2. Lua chon 2\n3. Ket thuc\nChon: ");
	scanf("%d",&i);
	printf("Ban lua chon %d",i);
}
void hamhai()
{
	printf("\nHam 2");
}

Nên để int main()

Chỗ này của bạn có vấn đề :D[quote=“viethung26, post:1, topic:27426”]
case 1: hammot();
break;
[/quote]

Nên dùng {} block code lại :smiley:

case 1:
{
        hammot();
	break;
}

Nên có

      default :
      break;  

dù không dung :smiley:

ak e biết rồi sai ở khai báo char thay bằng int là được nhưng mà không hiểu sao char có vùng biểu diễn từ -126 đến 125 mà nhỉ. E muốn tiết kiệm bộ nhớ

Bạn dùng kiểu định dạng chưa đúng.

  • %d là cho kiểu int
  • %c là kiểu char

Nhưng mà tại sao nó vẫn hiểu đúng đến cuối chương trình thì nó báo sai. E thử thay char k thay vì int k ở main() thì nó vẫn chạy chương trình con rồi mới báo lỗi ở cuối chương trình

Đơn giản là vì ide bạn sử dụng bắt lỗi không cao.
Nếu dùng trực tiếp compiler để buil thì sẽ báo lỗi ngay lập tức mà :smiley:
Thử chuyển qua codeblock để làm. Codeblock bắt lỗi chặt chẽ hơn free-c

Hiểu rồi. E cảm ơn a nhé

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