30/09/2018, 16:57

Sử dụng biến chung cho nhiều hàm trong C++

Mình đang làm đồ án môn học bằng ngôn ngữ C++. Viết các hàm sắp xếp. Gặp rắc rối như sau:

// Hàm đọc file
DocFile()
{
   //Đọc dữ liệu từ file input lấy ra số lượng phần tử của lưu vào biến n
   n = 10;
   // Lấy các giá trị tiếp theo lưu vào mảng a
   a[] = {1,2,3,4,5,6,7,8,9,0}
}

Sau đó mình muốn dùng lại biến n = 10 này và mảng a để đưa vào hàm sắp xếp như:

// Hàm sắp xếp
SelectionSort(a, n);

Thì hàm SelectionSort này không nhận được giá trị của 2 biến an
Xin hỏi cách khắc phục hay giải pháp khác. Xin cảm ơn.

Trịnh Minh Cường viết 18:57 ngày 30/09/2018

về file thì em chưa học nhưng anh thử dùng tham chiếu thử xem .

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

Biến na[] này là biến cục bộ, bạn không thể sử dụng như vậy được. Hoặc bạn phải truyền na[] từ ngoài vào hàm đọc file để lưu các dữ liệu này vào na[] sử dụng con trỏ. Hoặc là gọi hàm sort trong hàm DocFile

Trương Thái viết 19:04 ngày 30/09/2018

Hoặc bạn phải truyền na[] từ ngoài vào hàm đọc file để lưu các dữ liệu này vào na[] sử dụng con trỏ.

Bạn nói rõ hơn cái này dùm được không? Nhờ bạn cho đoạn code mẫu càng tốt.

  • Nếu hàm đọc file trả về mảng/mảng động a thì được. Nhưng có hàm nào trong C++ tính được số lượng phần tử của mảng không
  • Hàm đọc file này có trả về 2 tham số là: mảng a và số phần tử của mảng được không?
    Xin cảm ơn.
... viết 19:13 ngày 30/09/2018

Để code được đẹp và dễ hiểu, bạn có thể tạo 1 file header để khai báo các biến, định nghĩa một số giá trị.
Ví dụ:

#ifndef DEFINATION_H
#define DEFINATION_H

static const char* filename = "data.txt";

enum Major  {
    Software_engineer = 1,
    Network_engineer,
    System_information
};

enum Qualification  {
    Scientific_advisor = 1,
    Doctor_of_philosophy,
    Master,
    Bachelor
};

enum Position   {
    Director = 1,
    Senior_lecturer,
    Teacher,
    Teacher_assistant,
    Academic_administration_officer
};

#endif // DEFINATION_H

Khi đó bạn include vào file bạn cần chạy, cần khi nào thì gọi khi đó thôi.

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

return thì chỉ return được một giá trị duy nhất (con trỏ, mảng, biến, …). Muốn lấy ra (hoặc thay đổi) nhiều giá trị khi kết thúc hàm thì truyền tham chiếu & (mảng thì không cần) hoặc truyền vào biến con trỏ Chẳng hạn DocFile(a[], &n)

Nhưng có hàm nào trong C++ tính được số lượng phần tử của mảng không

Thực chất không cần thiết và không nên. Không ngẫu nhiên mà chúng ta luôn học được cách kèm theo giá trị n để biết số lượng phần tử của mảng.

Cách ngu: dùng biến toàn cục. Mình không biết tại sao biến toàn cục vẫn còn tồn tại nhưng không bao giờ mình xài

Sáng Béo viết 19:09 ngày 30/09/2018

Theo e thấy thì n với a[] của a không được khai báo trong hàm DocFile() => đó là biến toàn cục ạ?

Bài liên quan
0