Writing a Good Program. 7. Stream I/O

Similar documents
C++ does not, as a part of the language, define how data are sent out and read into the program

CS2141 Software Development using C/C++ Stream I/O

Unit-V File operations

Week 3: File I/O and Formatting 3.7 Formatting Output

Convenient way to deal large quantities of data. Store data permanently (until file is deleted).

Chapter-12 DATA FILE HANDLING

Object Oriented Programming Using C++ UNIT-3 I/O Streams

Developed By : Ms. K. M. Sanghavi

This chapter introduces the notion of namespace. We also describe how to manage input and output with C++ commands via the terminal or files.

After going through this lesson, you would be able to: store data in a file. access data record by record from the file. move pointer within the file

CSc Introduc/on to Compu/ng. Lecture 19 Edgardo Molina Fall 2011 City College of New York

Study Material for Class XII. Data File Handling

C++ files and streams. Lec 28-31

File I/O Christian Schumacher, Info1 D-MAVT 2013

Programming II with C++ (CSNB244) Lab 10. Topics: Files and Stream

Lecture 5 Files and Streams

C++ Programming Lecture 10 File Processing

Software Design & Programming I

Streams - Object input and output in C++

Chapte t r r 9

Object Oriented Programming In C++

Random File Access. 1. Random File Access

Strings and Streams. Professor Hugh C. Lauer CS-2303, System Programming Concepts

IS 0020 Program Design and Software Tools

Objects and streams and files CS427: Elements of Software Engineering

C++ Binary File I/O. C++ file input and output are typically achieved by using an object of one of the following classes:

Piyush Kumar. input data. both cout and cin are data objects and are defined as classes ( type istream ) class

Introduction. Lecture 5 Files and Streams FILE * FILE *

Lecture 9. Introduction

File Operations. Lecture 16 COP 3014 Spring April 18, 2018

UEE1303(1070) S 12 Object-Oriented Programming in C++

1. Demonstrates the Conditional Operator

Kapil Sehgal PGT Computer. Science Ankleshwar Gujarat Ch - 7. Data File Handling

Advanced File Operations. Review of Files. Declaration Opening Using Closing. CS SJAllan Chapter 12 2

Module 11 The C++ I/O System

Physics 6720 I/O Methods October 30, C++ and Unix I/O Streams

Today in CS162. External Files. What is an external file? How do we save data in a file? CS162 External Data Files 1

Streams and Basic File I/O Tools for Stream I/O Character I/O Inheritance

CS101 Linux Shell Handout

Streams in C++ Stream concept. Reference information. Stream type declarations

Chapter 14 Sequential Access Files

Input and Output File (Files and Stream )

Chapter 6. I/O Streams as an Introduction to Objects and Classes. Copyright 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Chapter 3 - Notes Input/Output

Consider the following example where a base class has been derived by other two classes:

by Pearson Education, Inc. All Rights Reserved. 2

A stream is infinite. File access methods. File I/O in C++ 4. File input/output David Keil CS II 2/03. The extractor and inserter form expressions

THE HONG KONG POLYTECHNIC UNIVERSITY Faculty of Engineering. Computer Programming Closed-book Written Test 3 Date: 28 March 2009 Time: 2:30 3:30 pm

File handling Basics. Lecture 7

COMP322 - Introduction to C++

[CSE10200] Programming Basis ( 프로그래밍기초 ) Chapter 7. Seungkyu Lee. Assistant Professor, Dept. of Computer Engineering Kyung Hee University

Fig: iostream class hierarchy

Stream States. Formatted I/O

And Even More and More C++ Fundamentals of Computer Science

Fundamentals of Programming Session 27

Computer programs are associated to work with files as it helps in storing data & information permanently. File - itself a bunch of bytes stored on

Chapter Overview. I/O Streams as an Introduction to Objects and Classes. I/O Streams. Streams and Basic File I/O. Objects

UNIT V FILE HANDLING

The C++ Language. Output. Input and Output. Another type supplied by C++ Very complex, made up of several simple types.

QUESTION BANK. SUBJECT CODE / Name: CS2311 OBJECT ORIENTED PROGRAMMING

C++ Input/Output: Streams

CS201 Solved MCQs.

CS103L SPRING 2018 UNIT 7: FILE I/O

I/O Streams and Standard I/O Devices (cont d.)

Page 1

Chapter 12. Streams and File I/O

Simple File I/O.

Given the C++ declaration statement below, which of the following represents the value of exforsys? e) None of the above. 1K

Reading from and Writing to Files. Files (3.12) Steps to Using Files. Section 3.12 & 13.1 & Data stored in variables is temporary

DATA FILE HANDLING FILES. characters (ASCII Code) sequence of bytes, i.e. 0 s & 1 s

Class 14. Input File Streams. Laura Marik Spring 2012 C++ Course Notes (Provided by Jason Minski)

Input/Output Streams: Customizing

G52CPP C++ Programming Lecture 17

Text File I/O. #include <iostream> #include <fstream> using namespace std; int main() {

Physical Files and Logical Files. Opening Files. Chap 2. Fundamental File Processing Operations. File Structures. Physical file.

ios ifstream fstream

by Pearson Education, Inc. All Rights Reserved. 2

Downloaded from

System Design and Programming II

SECTION A (15 MARKS) Answer ALL Questions. Each Question carries ONE Mark. 1 (a) Choose the correct answer: (10 Marks)

Programming in C/C

by Pearson Education, Inc. All Rights Reserved. 2

Chapter 12. Streams and File I/O. Copyright 2010 Pearson Addison-Wesley. All rights reserved

Chapter 8 File Processing

Streams contd. Text: Chapter12, Big C++

CS 103 Unit 14 - Streams

Chapter 12. Streams and File I/O. Copyright 2016 Pearson, Inc. All rights reserved.

File Input / Output Streams in C++ CS 16: Solving Problems with Computers I Lecture #9

Multiple Choice (Questions 1 14) 28 Points Select all correct answers (multiple correct answers are possible)

CSC 138 Structured Programming CHAPTER 4: TEXT FILE [PART 1]

Lab: Supplying Inputs to Programs

Today in CS161. Week #3. Learn about. Writing our First Program. See example demo programs. Data types (char, int, float) Input and Output (cin, cout)

CS 103 Unit 14 - Streams

Streams. Rupesh Nasre.

All About: File I/O in C++ By Ilia Yordanov, ; C++ Resources

Fall 2017 CISC/CMPE320 9/27/2017

BITG 1113: Files and Stream LECTURE 10

Scientific Computing

Introduction to C++ (Extensions to C)

What we will learn about this week:

Transcription:

Writing a Good Program 1

Input and Output I/O implementation is hardware dependent C++ does not, as a part of the language, define how data are sent out and read into the program The input and output (I/O) are handled by the standard C++ library (such as iostream) A library is a collection of object code to be linked to the C++ program to provide additional functionality For different platforms, different libraries (that may use the same name) can be used for I/O functions This allows the C++ program to be less platform dependent It is because I/O is usually quite different from computers to computers. 2

Buffering Output: Buffer to output device Input: Buffer to computer program iostream classes view the flow of data as being a stream of data, one byte following another Buffer is provided in some cases to the stream The stream of data does not send out if the buffer is not full or no flush request is received It is useful in some situations such as written data to disk since the overhead is very large. It is better to do it in single lots rather than byte by byte. Program Data Stream Buffer Hard disk or I/O device Temporary Memory I/O 3

Keyboard Chan char xyz[10]; cin >> xyz; Chan Buffer: Memory in your keyboard Program xyz = "Chan" 4

Standard I/O Objects When a C++ program that includes the iostream classes starts, four objects are created and initialized cin - handle input from the standard input, i.e. keyboard cout - handle output to the standard output, i.e. display cerr - handle unbuffered output to the standard error device, i.e. display in a PC clog - handle buffered error messages that are output to the standard error device, i.e. display in a PC. Buffered: Display only when a flush command is received, e.g. end of statement 5

Input using cin cin has been generally used for input data from keyboard int somevariable; cin >> somevariable; It is a global object does NOT need to define in our own code The operator >> is overloaded such that different kind of data can be read into the buffer of cin and then to some variable. float somevariable1; cin >> somevariable1; double somevariable2; cin >> somevariable2; char somevariable3[100]; cin >> somevariable3; 6

Member functions, e.g. cin.get() Ascin is an object, it has its own member functions Helps to obtain the input data in a more flexible way. #include <iostream> using namespace std; int main() { int c; while ((c = cin.get())!= EOF) { cout << "c: " << (char)c << endl; } } cout << "\ndone!\n"; return 0; cin.get() returns a integer from standard input The loop will stop if end-of-file (crtl-z) is input EOF: 0xFF is a symbolic constant 7

This is the "Enter" key (newline character) If we press crtl-z, it becomes End-of-file (EOF) condition. 8

Member functions, e.g. cin.getline() cin.getline() allows the whole line of data to be input to a character array cin.getline(buffer, MAXSIZE); Include NULL, i.e. '\0' at the end. At most MAXSIZE-1 real characters will be stored. The maximum length of data to be read is defined by MAXSIZE Unlikecin, getline() will read in the terminating newline character and throw it away Using cin, the terminating newline is not thrown away, but left in the input buffer. cin will neglect,though, any preceding space, tab and newline in the buffer. 9

Why do we use cin.getline()? cin >> abc has been used quite often since the redirection operator >> is overloaded, i.e. such statement can be used no matter abc is a character array, an integer or a floating-point number However if abc is a character array, cin >> abc allows only string with continuous characters input cin >> abc will stop to read in data if it sees, e.g. a space cin.getline() is different in that getline() can only read in string, but not value of other types; however, it will not stop when encountering spaces or tabs. 10

#include <iostream> using namespace std; int main() { char stringone[256]; char stringtwo[256]; char stringthree[256]; cout << "Enter string one: "; cin.getline(stringone,256); cout << "stringone: " << stringone << endl; Notice the space cout << "Enter string two: "; cin >> stringtwo; cout << "stringtwo: " << stringtwo << endl; The >> operator reads until a new-line or a space character is seen. That s why five six are read to stringthree[] cout << "Enter string three: "; cin.getline(stringthree,256); cout << "stringthree: " << stringthree << endl; return 0; } 11

char abc[10], xyz[10]; cin >> abc; cout << "abc: " << abc << endl; cin.getline(xyz,10); cout << "xyz: " << xyz << endl; Keyboard Chan Program Chan abc = "Chan" Buffer : Memory in your keyboard xyz ='\0' and then buffer clear The "Enter" code is still in the buffer 12

char abc[10], xyz[10]; cin.getline(abc,10);cout<<"abc: "<<abc<<endl; cin.getline(xyz,10); cout << "xyz: " << xyz << endl; Keyboard Program Chan abc = "Chan" Chan Buffer : Memory in your keyboard The "Enter" key has been cleared 13

Output with cout Just as cin, cout is also an object created when the iostream class starts cout represents the standard output, i.e. display The operator << is overloaded such that different kind of data can be sent out Similar to cin, cout also has a number of member functions cout.put(char a) Put the value of character a to output, and return cout cout.write(char *buf, int length) You may write cout.put(a)<<endl; Not including NULL Write length characters in buf to output device, and return cout. 14

#include <iostream> #include <string> using namespace std; int main() { char One[] = "One if by land"; int fulllength = strlen(one); int tooshort = fulllength - 3; int toolong = fulllength + 6; } cout.write(one,fulllength) << "\n"; // fulllength=14,return cout after write cout.write(one,tooshort) << "\n"; cout.write(one,toolong) << "\n"; return 0; write() asks the system to write toolong characters. Hence something unexpected is displayed 15

Other Member Functions cout.width(int a) Set the width of the next output field to a's value cout.fill(char b) Fill the empty field of the output by b's value #include return <iostream> cout. using namespace std; int main() { cout << "Start >"; cout.width(6); cout << 123 << "<End\n"; width(6) defines the total width of the field to be 6 char. fill('*') fills the empty field with * } cout << "Start >"; cout.width(6); cout.fill('*'); cout << 123 << "<End\n"; return 0; 16

Exercise 7.1 Write a program that asks the user to 1. Input his/her surname 2. Input his/her first name Input in TWO lines First name can be 1 word or 2 words If the user puts a space between the two words of his first name, add a hyphen to replace the space. Skip all other spaces in front of or after the first name or surname. For example: Chan Tai Ming Chan Tai-Ming Show the whole name after you read the user inputs. Hint: A string is stored in a character array. You can use a loop to check the content of every character of a string one by one, and to display the characters out one by one. 17

File Input and Output C++ provides library functions to help us deal with file access File access is usually performed in the following way: Open file Text file To claim from the system the access of a particular file Read data from file Close file Write data to file To perform the read or write instructions To indicate to the system the file access is finished (closed) It is not guaranteed that data can be written to file if not closing. 18

Classes Computer Programming and Basic Software Engineering File I/O Using Streams Unlike cin, we can have more than one file being processed in a program. Streams provide a uniform way of dealing with data sending to or reading from files The objects that are used to deal with files are called ofstream and ifstream objects To create an ofstream or ifstream object, we need to include the fstream header file in our program To open a file for write or read, first create an ofstream or ifstream object with the filename as the input parameter. ofstream fout("myfile.cpp"); ifstream fin("myfile.cpp"); Constructor fout and fin are objects but NOT standard objects, unlike cout and cin. Any other names can be used. 19

Read or Write Files After opening files, reading or writing files can be done in a similar way as cout or cin After writing/reading, the file should be closed by the member function close() of the ofstream/ifstream objects. #include <iostream> using namespace std; #include <fstream> int main() { ofstream fout("myfile.cpp"); fout << "This line is written to file.\n"; fout.close(); ifstream fin("myfile.cpp"); char ch; while (fin.get(ch)) //NULL if end of file cout << ch; fin.close(); return 0; } To see the output, look at the content of the file myfile.cpp If for any reason myfile.cpp cannot be opened, fout & fin will still be created, but fout.fail() return true. Similar to cout and cin.get(ch). (ch=fin.get())!=eof 20

No effect to input Still truncate for output Overwrite Computer Programming and Basic Software Engineering Changing Default Behavior Default behavior of opening a file by ofstream is to create it if it doesn t yet exist If exists, it deletes all its contents and overwrite on it (truncate) ofstream fout2("myfile.cpp",ios::app); This default behavior can be changed by providing a second parameter to the constructor ios::app File will be opened for appending data to the end of the existing file Open modes of classios ios::ate Place you at the end of the file (either input or output), but write data at the start position, like trunc ios::trunc Default for ofstream; truncates if it exists ios::in The file (if it exists) will NOT be truncated, the read/write cursor is positioned at the start of the file. ios::ate ios::in is similar to ios::app 21

Appending to the End of File #include <fstream> #include <iostream> using namespace std; int main() { ofstream f1("myfile.cpp"); //Default trunc f1 << "This line is written to file.\n"; f1.close(); char fname[]="myfile.cpp"; File name can be ofstream fout2(fname,ios::app); supplied by a variable fout2 << "This line is appended to the end of the previous line\n"; fout2.close(); ifstream fin("myfile.cpp"); The default behavior is changed char ch; while (fin.get(ch)) To avoid redeclaring variable, a cout << ch; different name should be provided fin.close(); even for opening the same file return 0;} 22

M //Assume myfile.cpp contains "This line is written to file.\n" ofstream fout2("myfile.cpp", ios::in); fout2 << "Beginning of file"; fout2.close(); Default behavior is changed to non-truncate. The line will replace the beginning part of the text in the file; but the rest words, if any, will be left in the file. ifstream fin("myfile.cpp"); if (!fin) {cout << "File opening error!\n"; return 0;} //The operator! is defined for stream object, if the stream is bad, return NULL (false) char ch; It is a good practice to while (fin.get(ch)) check if anything goes cout << ch; fin.close(); return 0; M wrong when opening a file 23

seekp has NO effect to ios::app Editing File It is often that we need to modify a particular part of a file - editing a file ofstream and ifstream offers 4 member functions that set the current position of an opened file For ofstream seekp(long pos); tellp(); For ifstream seekg(long pos); tellg(); The first position is position 0. Seekp() sets the current position. pos is a byte offset from the file beginning Tellp() tells the current position. Return a byte offset from the file beginning Seekg() and tellg() are similar to seekp and tellp except they are for ifstream 24

#include <fstream> #include <iostream> Change the current using namespace std; position to 10 int main() { ofstream test1file("test1"); cout << "Text written: \n"; cout << "This text is written to file!\n"; //write to screen test1file << "This text is written to file!\n"; test1file.close(); ifstream tin("test1"); Tell the current position tin.seekg(10); cout << "\ncurrent position: " << tin.tellg() << "\n"; cout << "\ncontent of the file after an offset of 10:\n"; char ch; while (tin.get(ch)) { cout << ch; } //display file tin.close(); return 0; } 25

Exercise 7.2 1. Build the program in the last page 2. Run the program in Command Prompt 3. Use the DOS command "dir" to find the file "test1" and display it by using the DOS command "type test1". Can you find the statement as shown in the program? 4. Use seekp such that the word "written" in the file is replaced by "*******". 5. Verify the result by using the DOS commands "dir" and "type test1" again. 26

Slides The powerpointslides are provided by Dr Frank Leung, EIE. 27