Function không pass value vào main được

Mình có bài tập phải viết chương trình đổi số thập phân sang nhị phân nhưng khi compile và nhận input thì nó không in ra số nhị phân + junk values, mong mọi người hướng dẫn cách fix.
Còn tại sao mình không viết chung vào hàm main thì tại vì đề bài nó yêu cầu vậy !
CODE của mình:

#include <stdio.h>
#include <stdlib.h>

void function1(int n)
{
	printf("Convert Decimal to Binary program\n");
	printf("\tEnter a positive number: ");
	scanf("%d", &n);
	while(n < 0)
	{
		printf("\tInvalid input\n\n");
	        printf("Convert Decimal to Binary program\n");
	        printf("\tEnter a positive number: ");
	        scanf("%d", &n);
	}
	
}

void function2(int n, int numb[])
{
	int i = 0;
	
	while(n > 0)
	{
		numb[i] = n%2;
		n = n/2;
	}
	
}

void function3(int numb[])
{
	
	int i, j;
	printf("\tBinary number : ");
	for(j = i - 1; j >= 0; j--)
	{
		printf("%d", numb[j]);
	}
}

int main()
{
	int n, numb[1000];
	int i, j;

	while(1)
    { 
		function1(n);
		function2(n, numb);
		function3(n);
		
		printf("\nPress any key continue\n\n");
		getch();
	}
	
	return 0;
}
  • function1(int n) Về cơ bản thì function này nó làm các việc như sau:

    • tạo ra bản sao của biến n (cùng tên, giá trị nhưng thực chất là 2 biến khác nhau).
    • yêu cầu ng dùng nhập giá trị cho n (bản sao).
    • do đó sau khi song function1() dù bạn có làm gì bên trong function1() thì n (bản gốc) nó vẫn giữ nguyên như thế.
  • function2() Biến i đứng im 1 chỗ (i = 0). Bạn phải có increment.

  • function3() Chỗ for (j = i - 1; . . . bạn lại tạo ra một biến i mới và nó vó thể có 1 giá trị trời ơi đất hỡi ở đâu đó do các chg trình khác đã sử dụng hoặc bằng 0 khi chưa đc dùng lần nào.

Bạn đang có 1 sự lầm tưởng k nhỏ đó là bạn nghĩ rằng: “function đơn giản là cái mà nó có thể lôi đc các instructions trong main() ra ngoài”.

Sau khi nói khác lỗi sai trên, mk hi vọng bạn có thể tự sửa nó. :slight_smile:

4 Likes

mình đã sửa lại code của mình theo cách hiểu của mình đối với bài hướng dẫn của bạn nhưng có vẻ mình hiểu sai nên nó vẫn không chạy nhưng có tiến triển là không còn junk values nữa:

  • function1 thì mình đổi thành pointer như sau function1(int *n)
  • function2 mình thêm increment
  • function3 mình xóa biến i , trong lặp for mình sửa thành for(j = j - 1; j >=0; j–)
    mong bạn chỉ mình chỗ sai
1 Like

OK hết r, còn mỗi cái này thôi.
Vậy sao bạn lại nghĩ là cho j = j - 1.
Mục đích của function này là in ra từ phần cuối đến phần tử đầu của mảng numb[], cơ mà, vậy thì j phải bắt đầu từ cuối lên đầu chứ, sao lại là j = j - 1. Và cũng biết đâu được mới đầu j có giá trị là bao nhiêu đâu. Bạn hãy tự nghĩ giải pháp cho nó nha :slight_smile:.

1 Like

làm thế nào để đưa giá trị mình tính được ở function2 xuống function3 vậy bạn, mình thử đặt j = 32 thì nó in ra địa chỉ hay sao ý @@

có nên dùng fflush() ko bạn

  • Bạn có thể sửa lại void function2() thành int function2() rồi cuối function2 bạn return i;. Như vậy khi gọi function2 thì bạn làm thêm động tác gán i = function2(n, numb);

  • function3(int numb[]) sửa lại thành function3(int number[], int i) như vậy là bạn có thể pass i từ function2() xuống function3(). :slight_smile:

2 Likes

cảm ơn bạn nha, tại mình mới học nên mình chưa hiểu sâu được <3

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