Lỗi error: 'nhapmang' was not declared in this scope?

Mình đang viết chương trình kiểm tra 1 mảng có tăng dần hay ko. Tuy nhiên khi compile thì chương trình của mình không chạy mà thông báo ra lỗi sau

E:\workspace\codeblocks\cppproject\main.cpp|10|error: ‘nhapmang’ was not declared in this scope|
E:\workspace\codeblocks\cppproject\main.cpp|12|error: ‘ktmangtang’ was not declared in this scope|

Đây là toàn bộ code của mình

#include <stdio.h>
#define max 100

int main()
{
	int a[max], n;
	nhapmang(a,n);
	printf("Ket qua: %d ");
	ktmangtang(a,n);
	//xuatmang(a,n);
	return 0;
}

void nhapmang(int a[], int &n)
{
	int i;
	printf("Nhap so phan tu cua mang n = ");
	scanf("%d", &n);
	for(i=0;i<n;i++)
	{
		printf("a[%d] = ", i);
		scanf("%d", &a[i]);
	}
}

/*
void xuatmang(int a[], int n)
{
	int i;
	printf("Noi dung mang la: \n");
	for(i=0;i<n;i++)
	printf("a[%d] = %d \t", i, a[i]);
}
*/

int ktmangtang(int a[], int n)
{
	int flag=1;
	for(int i=0; i<n-1; i++)
	if (a[i]>a[i+1]) //Vi pham dieu kien tang
	{
		flag=0;
		break;
	}
	return flag;
}
1 Like

Bạn hỏi gì?? :open_mouth:

2 Likes

@Ph_m_Ng_c_L_nh nên đặt câu hỏi cụ thể hơn

  • Tiêu để phải thể hiện được câu hỏi
  • nội dung phải nói rõ đang làm gì
  • khúc mắc chỗ nào
  • code đang thực hiện

Ví dụ về những câu hỏi gần đây trên DNH: Đổi giá trị 2 số cho nhau

1 Like

Cho mình hỏi code mình sai chỗ nào mà ko chạy đc vậy bạn ? Mình đang viết chương trình kiểm tra 1 mảng có tăng dần hay ko.

Vậy @Ph_m_Ng_c_L_nh phải định nghĩa như thế nào là không chạy được chứ?

  • compile không được?
  • không thực hiện được điều nào đấy?

Đã sửa tiêu đề thành

Viết chương trình kiểm tra 1 mảng có tăng dần hay ko?

P/S: Đây là code C++, không phải code C.

E dùng hàm int ktmangtang(int a[], int n); để xem các số nguyên trong mảng có tăng dần hay ko (trả về 1 nếu tăng dần, ngc lại thì trả về 0).

Đây là một câu khẳng định, câu phát biểu. Đâu là câu hỏi?

E đang học C mà a. Câu hỏi là chương trình e bị sai chỗ nào mà ko chạy đc vậy a ?

Đây là code C++, không phải C. C không có int & n

void nhapmang(int a[], int &n)

Chương trình của em bị sai rất nhiều chỗ, bởi vì em không hiểu cơ bản. Nhưng cái quan trọng hơn hết là em không biết cách đặt câu hỏi. Em xem từ trên xuống dưới anh hỏi em bao nhiêu câu hỏi. Rốt cục em vẫn cứ khăng khăng là chương trình em không chạy, trong khi em không định nghĩa như thế nào là không chạy.

Anh compile sơ qua thì thấy chương trình em compile lỗi, nếu chương trình bị lỗi, hãy copy lỗi và chỉ cho mọi người thấy chương trình của em bị lỗi.

Lỗi đầu tiên là

E:\workspace\codeblocks\cppproject\main.cpp|10|error: ‘nhapmang’ was not declared in this scope|
E:\workspace\codeblocks\cppproject\main.cpp|12|error: ‘ktmangtang’ was not declared in this scope|

Đó là do em không khai báo 2 hàm prototypes

#include <stdio.h>
#define max 100

void nhapmang(int a[], int &n); // phải khai báo prototype ở đây
int ktmangtang(int a[], int n); // phải khai báo prototype ở đây

int main()
{
    int a[max], n;
    nhapmang(a,n);
    printf("Ket qua: %d ");
    ktmangtang(a,n);
    //xuatmang(a,n);
    return 0;
}

void nhapmang(int a[], int &n)
{
    int i;
    printf("Nhap so phan tu cua mang n = ");
    scanf("%d", &n);
    for(i=0; i<n; i++)
    {
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
}

/*
void xuatmang(int a[], int n)
{
	int i;
	printf("Noi dung mang la: \n");
	for(i=0;i<n;i++)
	printf("a[%d] = %d \t", i, a[i]);
}
*/

int ktmangtang(int a[], int n)
{
    int flag=1;
    for(int i=0; i<n-1; i++)
        if (a[i]>a[i+1]) //Vi pham dieu kien tang
        {
            flag=0;
            break;
        }
    return flag;
}

Lỗi tiếp theo là em in ra %d mà em không cho vào biến nào

printf("Ket qua: %d ");

Nếu em không xem lại cách mình đặt câu hỏi, thì em sẽ khó lòng mà học lập trình được.

Video hướng dẫn prototype xem ở đây

3 Likes

Thầy dạy em vẫn dùng void nhapmang(int a[], int &n);

Không có nghĩa đấy là C, nhiều bạn vẫn cứ nhầm int & n là C. Nhưng đấy không phải là C mà là C++.

C không có khái niệm reference. tức việc khai báo int & n là không hợp lệ
C++ có khái niệm reference, tức việc khai báo int & n là hợp lệ

Trong C, dấu & chỉ có công dụng lấy địa chỉ, không thể viết int & n. E có thể compile được và chạy được bởi vì em đang viết code C++. Anh đoán là em đang dùng Visual Stdio, tạo project C++ và code C.

Em thử download một IDE khác như CodeBlocks, tạo project C, và viết toàn bộ code của em vào. Khi đó em sẽ thấy báo lỗi ngay.

Đúng rồi đó a, bên Code Block e tạo project C và kết quả ko chạy đc.
E tạo project C++ thì chạy đc rồi a.
E cũng có dùng C-Free nữa, nó thì chạy ngon ơ ko như CodeBlock

#include <stdio.h>
#define max 100

void nhapmang(int a[], int &n);
int ktmangtang(int a[], int n);
void xuatmang(int a[], int n);

int main()
{
	int a[max], n;
	nhapmang(a,n);
	printf("Ket qua: %d", ktmangtang(a,n));

	//xuatmang(a,n);
	return 0;
}

void nhapmang(int a[], int &n)
{

	printf("Nhap so phan tu cua mang n = ");
	scanf("%d", &n);
	for(int i=0;i<n;i++)
	{
		printf("a[%d] = ", i);
		scanf("%d", &a[i]);
	}
}


void xuatmang(int a[], int n)
{

	printf("Noi dung mang la: \n");
	for(int i=0;i<n;i++)
	printf("a[%d] = %d \t", i, a[i]);
}

int ktmangtang(int a[], int n) //Tra ve ket qua 1 neu mang tang, nguoc lai tra ve 0
{
	int flag=1;

	for(int i=0; i<n-1; i++)
	if (a[i]>a[i+1]) //Vi pham dieu kien tang
	{
		flag=0;
		break;
	}
	return flag;
}

I moved 2 posts to a new topic: Trong 1 project mình có thể thêm file cpp nữa không?

Anh KHÔNG TIN. Việc C không có int & n có nghĩa là, nhắc lại một lần nữa, C không có int & n.

Không có chuyện vô lý:

C-Free nữa, nó thì chạy ngon ơ ko như CodeBlock

Khi đã học lập trình thì cái cái gì không có, tức là không có. Việc C-Free chạy được thì có nghĩa là em đã tạo project C++, chứ không phải C.

1 Like

Trong khi dạy có thể lúc đó bạn chưa học con trỏ hoặc thầy dùng C++ quen rồi nên thầy để kiểu tham chiếu là trong C++,tất nhiên là project C++.Bạn để ý file bài tập thầy gửi cho bạn có đuôi là .cpp (c plus plus)
Trong C thì bạn nên dùng con trỏ thay cho tham chiếu.

khó quá. bỏ qua thôi =))

3 Likes

Lâu lâu nói đúng :smiley: :smiley:

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