ề ậ 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­ of­file đ 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 p­xu 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 end­of­file 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 end­of­file key

combination to end ";

ữ ệ ệ ụ đọ ữ ệ ừ Ví d   return 0; phím, ghi d  li u ra t p

ụ ọ ữ ệ ừ ệ

Ví d  đ c d  li u t

t p xu t ra màn hình

else

#include

{

cout << left;

#include

cout << "Student records:" << endl;

#include

cout << setw(COL_SZ) << "ID" <<  setw(COL_SZ) <<

#include

using namespace std;

"Name" << setw(COL_SZ) << "Grade  point average" <<

endl;

int main()

while(inFile >> stuId >> name >> gpa)

{

{

int stuId;

cout << setw(COL_SZ) << stuId <<  setw(COL_SZ) <<

string name;

name <

double gpa;

}

const int COL_SZ = 10;

}

ifstream inFile;

inFile.close();

return 0;

inFile.open("Students.txt");

}

if(!inFile.good())

cout << "File could not be

opened" << endl;

ả ố ượ

Đ c / ghi c  đ i t

ng

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;

}

ả ố ượ

Đ c / ghi c  đ i t

ng

#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 end­of­file 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 end­of­file 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;

{

}