01/10/2018, 08:28
Đọc mảng 2 chiều (ma trận) từ file txt bằng con trỏ cấp 2
Hi all em có bt đang bí về đọc FILE trong c++ mong ae giúp đỡ.
Đề: cho file txt nội dung chứa nội dung:
4
0 1 1 0
1 0 1 0
1 1 0 0
0 0 0 0
bool docMaTran(char* file, int &soDinh, bool** &maTran)
{
FILE* f = fopen(file, "r");
if (f == NULL)
return false;
fscanf(f, "%d", &soDinh);//Doc so dinh
//doc ma tran
maTran= new bool*[soDinh];// cap phat vung nho
for(int i=0; i<soDinh; i++)
maTran[i] = new bool [soDinh];
{
for(int i=0; i<soDinh; i++)
{
for(int j= 0; j<soDinh; j++)
fscanf(f, "%d", &maTran);
}
}
fclose(f);
return true;
}
MAIN
nt _tmain(int argc, _TCHAR* argv[])
{
// 1. Đọc dữ liệu
char* file = "input.txt";
int soDinh= 0; // Khởi tạo
bool** maTran= NULL; // Khởi tạo
bool kq= docMaTran(file, soDinh, maTran);
if (kq== false)
{
printf("Cannot open file %s
", file);
return 1;
}
// Test
printf("so dinh la: %d
", soDinh);
printf("Ma Tran:
");
for (int i = 0; i < soDinh; i++)
{
for (int j = 0; j < soDinh; j++)
{
printf("%d ", maTran[i][j]);
}
printf("
");
}
printf("
");
return 0;
}
Em đọc được số đỉnh còn ma trận ko đọc được, mong chỉ giáo
Bài liên quan
Tham số có đúng chưa (tham số
soDinhs
ấy) ?Biến
numVertexes
ở đâu ra thế ? phải làsoDinh
chứ !Sao cái chỗ này mở đóng ngoặc tùm lum vậy, copy đoạn code chính xác rồi paste đoạn code lên đây, bao phủ đoạn code bởi cặp thẻ tag
[code][/code]
.Mà
maTran
là con trỏ cấp 2 sao lại dùngfscanf(f, "%d", &maTran);
trong vòng lặp ?Chương trình bạn không sử dụng tham số dòng lệnh thì để như thế làm gì ? Mà viết sai rồi kìa, thiếu chữ “i” ở đầu dòng.
Tuy
_tmain()
là 1 extension của Microsoft C++ Compiler nhưng nó không phải chuẩn nên hạn chế dùng !Mà code C thì không nên dùng tham chiếu, hãy dùng con trỏ.
File chứa hàm docMaTran
File chứa hàm main:
Đây ạ em sửa lại rồi đây,
về tham chiếu hay _tmain do GV yêu cầu vậy ạ, a sửa giúp e
Nên để
const char *file = "input.txt";
và sửa lại cái tham số đầu trên hàmdocMaTran
luôn.Như đã nói ở trên,
maTran
là con trỏ cấp 2 thì sao lại để như thế ?Sửa lại thành:
fscanf(f, "%d", &<tên mảng>[<chỉ số hàng>][<chỉ số cột>]);
Mà sao lại dùng kiểu
bool
cho con trỏ ?fscanf(f, “%d”, &maTran[i][j]); cũng ko ra luôn
bool là vì GV e nói ma trận chỉ đánh số 01 nên dùng bool cho tiết kiệm
Cái đó là tùy cách bạn chia file như thế nào nữa. Ví dụ, 1 file.cpp chứa hàm main, 1 file.cpp chứa hàm đọc file mà không gọi vào thì nó cũng chẳng biết hàm đọc file ở đâu ra.
Cái đó là đối với data của file toàn là số 0 1. Chứ nếu số lớn hơn thì nên dùng int. Tuy nhiên bài tập chỉ cho data trong file toàn là số 0 1 nên dùng bool cũng được.
em đọc được r bác ạ