Lập trình C: Bài 14 – Nhập xuất file trong C/C++
Trong quá trình lập trình, chúng ta thường phải đọc và ghi dữ liệu ra file. Bài này sẽ hướng dẫn các bạn cách làm đơn giản với C và C++.
Lưu ý: Trong các ví dụ dưới đây, các file input và output đặt cùng thư mục với file mã nguồn.
Ví dụ: Cho file input.txt, dòng đầu tiên gồm 1 số n là số lượng bạn bè, n dòng tiếp theo mỗi dòng là tên của 1 bạn bè. Đọc và ghi ra file output.txt danh sách bạn bè kèm số thứ tự
input.txt | output.txt |
---|---|
3 Nguyen Van Quan Nguyen Thi Hong Anh Nguyen Van Hung |
1.Nguyen Van Quan 2.Nguyen Thi Hong Anh 3.Nguyen Van Hung |
Code C
#include <stdio.h> int main() { int n, i; char name[255]; // khai bao bien ten FILE *fi = fopen("input.txt", "r"); // mo file de doc FILE *fo = fopen("output.txt", "w"); // mo file de ghi fscanf(fi, "%d", &n); // doc so n tu file fi fgets(name, 255, fi); // loai bo dau xuong dong sau khi doc so n for(i = 0; i < n; i++) { fgets(name, 255, fi); // doc chuoi gom 255 ky tu tu file fi fprintf(fo, "%d.%s", (i+1), name); // ghi chuoi ra file fo } fclose(fi); // dong file fi fclose(fo); // dong file fo return 0; }
Code C++
#include <fstream> using namespace std; int main() { int n; string name; ifstream fi("input.txt"); // mo file de doc ofstream fo("output.txt"); // mo file de ghi fi >> n; // doc 1 so tu file getline(fi, name); // loai bo dau xuong dong sau khi doc so n for (int i = 0; i <n; i++) { getline(fi, name); // doc 1 dong tu file fo << (i+1) << "." << name << '\n'; // ghi 1 dong ra file } fi.close(); fo.close(); return 0; }
làm sao để nhập dữ liệu vào file?
Bên trên có cách ghi vào file rồi mà.
Giả sử mình có 1 file input.txt như này:
11 Martinez Abdel 5.5
20 Mas Abella 16
6 Pla Babet 10.75
mình tạo 1 struct Sinh_vien gồm int id, char ten[50], char ho[50], double diem;
và 1 array struct Sinh_vien sv[3]
Cho mình hỏi làm cách nào để lấy dữ liệu từ file input.txt để được sv[1].id = 11; sv[1].ten = ‘Martinez”; sv[1].ho = ‘Abdel’; sv[1].diem = 5.5
Vì mình thử làm và code nó có lấy khoảng trắng, mình thử bỏ qua khoảng trắng bằng code như sau nhưng không được:
//char *temp;
do
{
fscanf(fi, “%c”, &(*(temp+j)));
j+=1;
}
while (*(temp+j) == SPACE);
free(temp);
//
Mong nhận được thỉnh giáo ạ.
Mình có cho j=0 mà trong này quên ghi
Bạn dùng %s thay cho %c nhé.
fscanf(fi, “%d”, &sv.id);
fscanf(fi, “%s”, &sv.ten);
fscanf(fi, “%s”, &sv.ho);
fscanf(fi, “%d”, &sv.diem);
Mình đã thử như cách của bạn nhưng nó lấy khoảng trắng giữa id và họ nên ra kết quả sai
Vậy bạn thử cái này:
fscanf(fi, “%d %s %s %d”, &sv.id, &sv.ten, &sv.ho, &sv.diem); // (copy paste nhé, có khoảng trắng giữa %d và %s)
Vẫn ra sai như ban đầu. Mình có thể gửi code của mình qua mail, bạn xem hộ mình được không? Cảm ơn bạn nhé
Chat với mình qua fb.com/nguyenvanquan7826 nhé.
em tạo chương trình nhập thông tin sinh viên từ bàn phím,giờ vẫn chương trình đó nhưng thông tin được lưu trên file và khi xuất thì xuất thông tin trên file thì phải làm sao ạ.em code C++,anh giúp em với ạ,em đang gấp ạ.Cảm ơn anh!!!
Thì em xuất ra file thôi.
Ban nguyenvanquan7826 cho mình hỏi, làm cách nào sửa vị trí bất kì trong file bằng C++ nhỉ. thanks.
Em chạy thử code của anh thì k đọc đc n, in thử thì ra n=0, thay n bằng giá trị xác định thì chạy đc là sao anh?
Bạn phải có dữ liệu trong file nhé.
em có một file la input.txt va có dữ liệu là các chuỗi hàm số:
x=1;
y=x+3;
x=12;
làm sao để em có thể gọi từng chuỗi trong file đó roi kiểm tra từng chuỗi để check một số điều kiện xem chuỗi đó đúng hay sai rồi in ra chuỗi kế tiếp và kiêm tra cho đén hết file dc ạ?
p/s:
em muốn dùng hàm fgets mà sao nó toàn in ra toàn bộ file roi moi kiem tra
trong ví dụ ở bài viết mình có đọc từng dòng đó bạn.
em sai c nen khong co getline de doc tung dong.
gets cũng đọc từng dòng mà.
int main()
{
char statement[50];
FILE *fin;
fin=fopen(“input.txt”, “r”);
while (fgets(statement, 50, fin) !=NULL)
{
puts(statement);
int check= CORRECT(statement);
if(check==0)
printf(“This statement is illegal”);
else
printf(“This statement is legal”);
}
printf(“\n”);
return 0;
}
em viet code nhu vay nhung no in ra cho toi khi reach het 50 ki tu moi kiem tra, nhung neu em muon kiem tra tung dong ket thuc bang ; va check dong do roi moi chat dong ties theo thi sao a
Đọc như vậy là đọc từng dòng rồi mà bạn.
dạ a cho e hỏi ạ
e mới chuyển từ pascal sang c++
nếu như pascal nhấp chuột vào “input.txt” và bấm ctrl+enter thì sẽ ra file input. Vậy trong c++ thì làm như thế nào ạ
em cảm ơn
Tự mở bằng tay thôi e.
cho hỏi r với w ở code C nghĩa là j vậy
read và write nhé.
Nguyenvanquan7826, cho em hỏi là sao em làm lại mà sao nó lại đọc file và in file ra ạ.
ko hiểu câu hỏi của bạn lắm.
Cho em hỏi là cái dòng fgets(name, 255, fi); thứ nhất ý nghĩa của nó em đọc ko hiểu lắm,tại sao nó lại giống dòng đọc chuỗi từ File ạ.Em xin cảm ơn ạ
thì nó là đọc chuỗi từ file mà.