ể
ậ
ề ậ Bài 9: L p trình đi u khi n ấ nh p/xu t
ớ
ệ
i thi u
Gi ồ
ậ
ấ • Nh p/xu t bao g m:
ấ ừ
ậ
▫Nh p xu t t
bàn phím.
ấ ừ
ậ
▫Nh p xu t t
file.
ậ
ạ
• Ph n l n các đ c tính nh p xu t cho phép n p ồ
ầ ớ ồ
ấ ặ ử ạ ch ng hàm và n p ch ng toán t
.
ậ
ấ
(cid:222) Ngoài nh p xu t các ki u d li u c b n, ng
ể ữ ệ ơ ả ấ
ự
ể
ườ
ườ i ể ữ ệ ậ dùng có th xây d ng nh p/xu t cho ki u d li u ng
ị i dùng đ nh nghĩa
ủ
ặ
ở
ọ
(cid:222) Là đ c tính m quan tr ng c a C++.
ậ
ấ
Nh p/xu t thi
ế ị t b ả
ấ
ớ
• Th vi n iostream.h cung c p kh năng l n các
ấ
ư ệ ậ ể ki u nh p xu t.
ư ệ
ồ
ớ
• Th vi n này bao g m các l p:
Dòng xu tấ
• Ostream cung c p các kh năng xu t đ nh d ng và xu t
ấ ị ả ạ ấ
ạ ấ ị không đ nh d ng.
• cout là đ i t
ố ượ ộ ớ ấ ng thu c l p ostream là xu t dòng ra màn
hình.
• Toán t xu t.ấ
ử ể ư ị ầ ấ chèn dòng << đ đ a các giá tr c n xu t lên dòng
ệ ớ ể ồ
ử • Toán t ị ệ ượ ạ ể << đã đ ẵ
ể ữ c n p ch ng đ làm vi c v i các ki u d ườ ỏ i ị ể ự ị ớ ườ ể ạ ồ i dùng đ nh
li u đ nh s n, ki u string, giá tr con tr . Cho phép ng ệ dùng n p ch ng đ th c hi n v i ki u dl ng nghĩa.
ấ ộ ự ể • Hàm put đ xu t m t ký t ra màn hình.
Dòng nh pậ
•
ạ ấ ả ậ ị
ạ istream cung c p các kh năng nh p đ nh d ng và không ị đ nh d ng.
• cin là đ i t
ố ượ ộ ớ ậ ừ ng thu c l p istream, là dòng nh p t bàn
phím.
• Toán t bi n.ế
ử ị ừ ể ư trích >> đ đ a các giá tr t ậ dòng nh p vào các
ệ ớ ể ồ
ử • Toán t ị ệ ượ ạ ể >> đã đ ẵ
ể ữ c n p ch ng đ làm vi c v i các ki u d ườ ỏ i ị ể ự ị ớ ườ ể ạ ồ i dùng đ nh
li u đ nh s n, ki u string, giá tr con tr . Cho phép ng ệ dùng n p ch ng đ th c hi n v i ki u dl ng nghĩa.
ủ
ặ ậ • Các hàm khác c a dòng nh p: get(), getline(), ignore(), ậ i dòng nh p putback() đ t ký t ự ở ạ tr l
ạ
ậ
ấ
ị
Nh p/xu t không đ nh d ng
• Nh p/xu t không nh d ng
ậ đượ đị ự ấ ớ
• Hàm istream::read():
▫ istream& read(unsigned char* puch, int nCount);
▫ istream& read(signed char* psch, int nCount);
ừ
ế
Trích các byte t
ớ ạ nCount đ t đ n ho c
dòng cho đ n khi gi
i h n
ạ ế ậ
ạ ế
ế
ặ ị cho đ n khi end offile đ t đ n. Hàm này có ích cho dòng nh p nh phân
ệ ạ c th c hi n v i các hàm thành viên istream::read() và ostream::write().
ạ
ậ
ấ
ị
Nh p/xu t không đ nh d ng
• Hàm ostream::write():
▫ ostream& write(const unsigned char* puch, int nCount);
▫ ostream& write(const signed char* psch, int nCount);
ượ
Chèn nCount byte vào t
vùng đ m (đ
c tr b i
ượ
ế
ự
ch đ text, các ký t
ỏ ở puch và psch) ể ượ CR có th đ
c
ị
ệ ừ ở ở ế ộ c m ấ
vào dòng. N u file đ chèn vào. Hàm này có ích cho dòng xu t nh phân
• Hàm istream::gcount():
int gcount();
ả ề ố ự ậ ạ ở ị Hàm tr v s ký t đã trích b i hàm nh p không đ nh d ng
ố cu i cùng
ấ
ậ
Nh p xu t file
ớ
• C++ h tr các l p: ỗ ợ
ể ạ
ệ
ấ
▫ofstream dùng đ t o các dòng xu t (ghi t p)
ọ ệ
ể ạ
ậ
▫ifstream dùng đ t o các dòng nh p (đ c t p)
ậ
ấ
▫fstream dùng đ t o các dòng nh p, dòng xu t
ậ
ặ
ể ạ ấ ho c dòng nh pxu t
ệ ớ Làm vi c v i File
ữ ệ
Ghi d li u vào File
ộ
ớ ớ
ệ
ệ
ồ
ớ
ấ ể ạ • 1. Dùng l p ofstream đ t o ra m t dòng xu t và ấ ữ ộ ệ ụ ể ắ g n nó v i m t t p c th . Khi đó vi c xu t d ữ ệ ệ li u ra dòng này đ ng nghĩa v i vi c ghi d li u lên t p.ệ
ự
ấ ừ ạ
ư • 2. Th c hi n xu t d li u ra dòng xu t v a t o nh
ệ ấ ữ ệ
ể
ấ
ẩ
ấ ữ ệ th xu t d li u ra dòng xu t chu n cout
ữ ệ
Ghi d li u vào file
ộ đố ượ
ộ
để ở ộ
• T o m t
i t
ng thu c ofstream
m m t
ạ file
• Cách 1
▫ofstream outFile("data.txt");
• Cách 2
▫ofstream outFile;
▫outFile.open("data.txt);
• Cách 3
▫ofstream out("data.txt", ios::nocreate);
ữ ệ
Ghi d li u vào file
• File Mode:
▫ios::app means append the file
▫ios::ate means position the file
▫ios::nocreate means the file must exist, otherwise
the open fails
▫ios::noreplace means the file must not exist,
otherwise the open fails
Ví dụ
• ofstream out("data.txt", ios::nocreate);
if(!out) cout<<"fails!"; if(!out.good() cout<<"fails"; if (out.fail()) cout<<"fails";
if(out) cout<<"File opened"; if(out.good() cout<<"File opened"; if (!out.fail()) cout<<"File opened";
ữ ệ
Ghi d li u vào File
ố ượ
ữ ệ
ở
ể
ng m file ta có th ghi d li u
ư
Khi đã có đ i t ra file nh sau:
out<<"This is going to the disk";
ử ụ
để đ
S d ng hàm close
óng file
ặ
ủ để đ
óng.
out.close(); Ho c dùng hàm h y out.~ofstream();
ọ ữ ệ ừ
Đ c d li u t
File
ạ
• T o m t
i t ở ộ ệ để đọ
ớ
ậ ộ ớ ng dòng nh p thu c l p ắ ệ c và g n t p v i
ộ đố ượ ifstream, m m t t p dòng nh p. ậ
ng
ươ ừ ạ
ậ
ư nh p d li u t dòng nh p v a t o nh
ậ ử đ • Sau ó dùng toán t nh p >> và các ph ậ ứ để ữ ệ ừ th c ữ ệ ừ ậ ể th nh p d li u t cin
Ví dụ
ifstream someData("data.txt");
char aChar;
someData.get(aChar);
while(someData)
{
someData.get(aChar);
cout< } #include while(cin >> stuId >> name >>
gpa) #include { #include using namespace std; outFile << stuId << " " << name
<< " " < int main() { cout << "Enter ID, name, and grade
point average" << endl; int stuId; string name; cout << "Enter endoffile key
combination to end "; double gpa; } ofstream outFile; } outFile.open("Students.txt"); outFile.close(); if(!outFile.good()) c d li u t bàn } cout << "File could not be opened" <<
endl; else { cout << "Enter ID, name, and grade point average" << endl; cout << "Enter endoffile key combination to end "; ữ ệ ệ ụ đọ ữ ệ ừ
Ví d
return 0;
phím, ghi d li u ra t p else { cout << left; cout << "Student records:" << endl; cout << setw(COL_SZ) << "ID" <<
setw(COL_SZ) << "Name" << setw(COL_SZ) << "Grade
point average" << endl; while(inFile >> stuId >> name >> gpa) { cout << setw(COL_SZ) << stuId <<
setw(COL_SZ) << name < } } inFile.close(); return 0; } class Student ostream& operator<<(ostream& out,
Student stu) { { friend ostream& operator<<(ostream&,
Student); out << stu.stuId << " " << stu.name <<
" " << stu.gpa << endl; friend istream& operator>>(istream&,
Student&); return out; private: } int stuId; istream& operator>>(istream& in,
Student& stu) string name; { double gpa; in >> stu.stuId >> stu.name >> stu.gpa; }; A Student class return in; } #include while (cin >> aStudent) #include { #include outFile << aStudent << endl; #include cout << "Enter ID, name, and grade
point average" << using namespace std; int main() endl; { cout << "Enter endoffile key
combination to end "; Student aStudent; } ofstream outFile; outFile.close(); outFile.open("Students2.txt"); return 0; cout << "Enter ID, name, and grade point
average" < Program that writes objects to an output file } cout << "Enter endoffile key combination
to end "; #include #include #include #include using namespace std; int main() Student aStudent; ifstream inFile; inFile.open("Students2.txt"); cout << endl << "Output from disk:" << endl; while(inFile >> aStudent) { cout << "Student: " << aStudent; } inFile.close(); return 0; { }ụ ọ ữ ệ ừ ệ
ấ
Ví d đ c d li u t
t p xu t ra màn hình
#include
#include
#include
#include
using namespace std;
int main()
{
int stuId;
string name;
double gpa;
const int COL_SZ = 10;
ifstream inFile;
inFile.open("Students.txt");
if(!inFile.good())
cout << "File could not be
opened" << endl;
ả ố ượ
ọ
Đ c / ghi c đ i t
ng
ả ố ượ
ọ
Đ c / ghi c đ i t
ng

