30/09/2018, 20:08
[FILE trong C] hỏi về đọc ghi ma trận
chào mọi người, đề bài của em là viết hàm đọc ma trận từ tập tin matrixin và xuất ra tập tin matrixout. Đây là code của em
// BT2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <conio.h>
void docMaTran(int **&arr, int &d, int &c)
{
int k = 0;
FILE *f = fopen("matrixin.txt", "r");
while (!feof(f))
{
if (fgetc(f) == ' ')
k++;
if (fgetc(f) == '
')
d++;
}
c = (k / d) + 1;
arr = new int*[d];
for (int i = 0; i < d; i++)
{
arr[i] = new int[c];
for (int j = 0; j < c; j++)
{
fscanf(f, "%d", &arr[i][j]);
}
}
fclose(f);
}
void ghiMaTran(int **arr, int d, int c)
{
FILE *f = fopen("matrixout", "w");
for (int i = 0; i < d; i++)
{
for (int j = 0; j < c; j++)
{
fprintf(f, "%d", arr[i][j]);
}
fprintf(f,"
");
}
fclose(f);
}
int _tmain(int argc, _TCHAR* argv[])
{
int **arr, d, c;
docMaTran(arr, d, c);
ghiMaTran(arr, d, c);
for (int i = 0; i < d; i++)
{
delete[]arr[i];
}
delete[]arr;
_getch();
return 0;
}
em không biết đã sai chỗ nào. mong được mọi người giúp đỡ
Bài liên quan
sau vòng
while
để đếm k, d thì bạn đã đọc hết file rồi. Do đó để đọc lại từ đầu file bạn nên thêm lệnhrewind(f);
sau vòng whilekhông biết mình làm vậy còn sai gì nữa mà lại bị bug, mong bạn xem giúp mình
Nếu file của bạn định dạng đúng thì bạn nên bỏ cái
while(!feof...
sau đi bởi nó sẽ đọc lại 1 lần nữa nên bị saiý bạn là sao ạ? không phải rewind(f) là đưa con trỏ lên đầu sau đó đọc lại từ đầu sao?
mình cũng phải đọc lại lần nữa để đọc từng phần tử chứ ạ? không biết mình hiểu vậy có sai không nữa? mong bạn giải đáp
Không phải code bạn có 2 vòng while đó sao. Ý là bỏ while sau thôi.
Bug thì có nhiều lí do:
ý là đếm khoảng cách với xuống dòng thì đếm để xây ma trận