30/09/2018, 21:17

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("	MENU
======================================");
	printf("
1. ham mot
2. ham hai
3. Ket thuc
Chon: ");
	scanf("%d",&k);
	switch(k)
	{
		case 1: hammot();
			break;
		case 2: hamhai();
			break;
		case 3: 
			break;
	}
	getch();
}
void hammot()
{
	char i;
	printf("
	MENU2
======================================");
	printf("
1. lua chon 1 
2. Lua chon 2
3. Ket thuc
Chon: ");
	scanf("%d",&i);
	printf("Ban lua chon %d",i);
}
void hamhai()
{
	printf("
Ham 2");
}
Ngô Doãn Tuấn viết 23:24 ngày 30/09/2018

main()
{

Nên để int main()

scanf("%d",&i);

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

case 1:
{
        hammot();
	break;
}

Nên có

      default :
      break;  

dù không dung

Hùng Nguyễn Việt viết 23:20 ngày 30/09/2018

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ớ

Ngô Doãn Tuấn viết 23:27 ngày 30/09/2018

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

  • %d là cho kiểu int
  • %c là kiểu char
Hùng Nguyễn Việt viết 23:27 ngày 30/09/2018

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

Ngô Doãn Tuấn viết 23:27 ngày 30/09/2018

Đơ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à
Thử chuyển qua codeblock để làm. Codeblock bắt lỗi chặt chẽ hơn free-c

Hùng Nguyễn Việt viết 23:21 ngày 30/09/2018

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

Bài liên quan
0