30/09/2018, 16:20

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:workspacecodeblockscppprojectmain.cpp|10|error: ‘nhapmang’ was not declared in this scope|
E:workspacecodeblockscppprojectmain.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: 
");
	for(i=0;i<n;i++)
	printf("a[%d] = %d 	", 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;
}
Trần Hồng Phong viết 18:28 ngày 30/09/2018

Bạn hỏi gì??

Nguyễn Minh Dũng viết 18:30 ngày 30/09/2018

@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 diễn đàn: Đổi giá trị 2 số cho nhau

Phạm Ngọc Lịnh viết 18:22 ngày 30/09/2018

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.

Nguyễn Minh Dũng viết 18:28 ngày 30/09/2018

Cho mình hỏi code mình sai chỗ nào mà ko chạy đc vậy bạn

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.

Phạm Ngọc Lịnh viết 18:36 ngày 30/09/2018

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).

Nguyễn Minh Dũng viết 18:29 ngày 30/09/2018

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?

Phạm Ngọc Lịnh viết 18:25 ngày 30/09/2018

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 ?

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

E đang học C mà a

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

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

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

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

Phạm Ngọc Lịnh viết 18:36 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

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.

Phạm Ngọc Lịnh viết 18:34 ngày 30/09/2018

Đú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;
}
Nguyễn Minh Dũng viết 18:29 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:27 ngày 30/09/2018

E cũng có dùng C-Free nữa, nó thì chạy ngon ơ ko như CodeBlock

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.

Người Cô Đơn viết 18:35 ngày 30/09/2018

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

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.

X viết 18:26 ngày 30/09/2018

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

Trần Hồng Phong viết 18:25 ngày 30/09/2018

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

Bài liên quan
0