Làm thế nào để đọc và ghi vào cùng một file trong c++?

Đề bài: Viết CT nhập một mảng số nguyên gồm n phần tử từ một tập tin văn bản MANG.TXT có nội dung
như sau:
Dòng đầu chứa số n.
Dòng kế tiếp chứa n số nguyên.
Ví dụ nội dung tập tin MANG.TXT như sau:

6
5 36 2 -2 4 9

Thêm 1 dòng mới vào tập tin MANG.TXT có nội dung là các số chính phương của mảng.

PTB2.TXT
GIAIPTB2.TXT
Chỗ nào để bạn thấy đây là cùng một tập tin?

em xin lỗi ạ em cop nhầm đề ạ.
Đề bài này mới đúng ạ
Viết CT nhập một mảng số nguyên gồm n phần tử từ một tập tin văn bản MANG.TXT có nội dung
như sau:
Dòng đầu chứa số n.
Dòng kế tiếp chứa n số nguyên.
Ví dụ nội dung tập tin MANG.TXT như sau:

6
5 36 2 -2 4 9

Thêm 1 dòng mới vào tập tin MANG.TXT có nội dung là các số chính phương của mảng.

Mở MANG.TXT ra để đọc > lưu các giá trị đã đọc và mảng > đóng tập tin lại > mở MANG.TXT ra để ghi > ghi kết quả vào > đóng lại và kết thúc.
Nếu bài PTB2.TXT/GIAIPTB2.TXT bạn làm được thì bài này y chang vậy thôi. Nhưng lưu ý: đọc xong thì nhớ đóng (close) thì lúc mở để ghi mới được.

4 Likes
void XuatChinhPhuong(ofstream &out,int a[], int n)
{
	out.open("MANG.TXT", ios_base::out);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j * j <= a[i]; j++)
			if (j * j == a[i]) {
				out <<  a[i]<<" ";
			}
	}
	out.close();
}

int main()
{
	ifstream in;
	
	PS a[100];
	int n;
	
	cout << "Nhap so luong phan tu trong mang: ";
	cin >> n;
	if (n < 0 || n>100)
	{
		cout << "So n vua nhap khong le. Vui long kiem tra lai!";
	}
	in.open("MANG.TXT", ios_base::in);
	if (in.fail() == true)
	{
		cout << "File nay khong ton tai.";
		return 0; 
	}
	
	Nhap(a, n);
	RutGon(a, n);
	in.close();
	ofstream out;
	GhiFile(a, n, out);
	out.close();
	return 0;
}

Em làm như vầy có đúng không ạ. Em không rõ lắm bước lưu các giá trị đã đọc và mảng ạ. Anh/chị có thể giải thích rõ giúp em bước này được không ạ. Em xin cảm ơn nhiều ạ

Là nhập giá trị vào mảng đấy.
Nhưng nhập tất cả từ tập tin chứ có phải từ cin đâu mà có đoạn bạn gọi đến cin vậy?
Tập tin fstream in bạn khai báo mà không dùng đến luôn?

2 Likes
void DocFile(ifstream &in, int a[], int& n)
{
	for (int i = 0; i < n; i++)
	{
		in >> a[i];
	}
        in.close();
}
void XuatChinhPhuong(ofstream &out,int a[], int n)
{
	out.open("MANG.TXT", ios_base::out);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j * j <= a[i]; j++)
			if (j * j == a[i]) {
				out <<  a[i]<<" ";
			}
	}
	out.close();
}

int main()
{
	ifstream in;
	in.open("MANG.TXT", ios_base::in);
	if (in.fail() == true)
	{
		cout << "File nay khong ton tai.";
		return 0; 
	}
	int n=0;
	int a[100];
	in >> n;   
	DocFile(in, a, n);   
	ofstream out;
	out.open("MANG.TXT", ios_base::out);
	XuatChinhPhuong(out, a, n); //Ham xuat chinh phuong
	out.close();
	in.close();
	return 0;
}

Vậy em sửa lại như thế này thì có đúng không ạ?

Dúng hay không thì bạn tự chạy và xem kết quả đã đúng với yêu cầu chưa.
Mình nhắc lại: đọc xong nhớ đóng (close).

2 Likes

Code chạy nhưng mà vào file kiểm tra thì mất những dữ liệu đã ghi trước đó ạ. Em không rõ là có sai sót chỗ nào ạ.

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