Moving Data Within a C Program Input Getting








![Review: C++ Input/Output Stream Classes #include <iostream> using namespace std; int main (int, char*[]) Review: C++ Input/Output Stream Classes #include <iostream> using namespace std; int main (int, char*[])](https://slidetodoc.com/presentation_image/34d499411d78699852cbe5ad9f67780a/image-9.jpg)







- Slides: 16

Moving Data Within a C++ Program • Input – Getting data from the command line (we’ve looked at this) – Getting data from the standard input stream – Getting data from files • Output – Sending data to standard output (we’ve looked at this) – Sending data to files • Transfer within the program – Moving data into and out of different types of variables – Moving data into and out of different data structures CSE 232: Moving Data Within a C++ Program

Overview of Today’s Session • Using the on-line C++ reference pages (throughout) • Basic input and output stream features • Basic file input and output stream features • Moving data into and out of variables • Moving character data into and out of strings • Moving data into and out of a vector container CSE 232: Moving Data Within a C++ Program

C++ Reference Link on CSE 232 Web Page CSE 232: Moving Data Within a C++ Program

Main C++ Reference Page CSE 232: Moving Data Within a C++ Program

C++ I/O Page CSE 232: Moving Data Within a C++ Program

C++ I/O Examples Page CSE 232: Moving Data Within a C++ Program

File I/O Examples • Exercise: try out examples from C++ I/O reference – – Do they work as written? What files do you need to include to make them work? What happens if you try to open a file that doesn’t exist? What other ways can you explore the behaviors of the features those examples are using/illustrating? CSE 232: Moving Data Within a C++ Program

C++ I/O Display All CSE 232: Moving Data Within a C++ Program
![Review C InputOutput Stream Classes include iostream using namespace std int main int char Review: C++ Input/Output Stream Classes #include <iostream> using namespace std; int main (int, char*[])](https://slidetodoc.com/presentation_image/34d499411d78699852cbe5ad9f67780a/image-9.jpg)
Review: C++ Input/Output Stream Classes #include <iostream> using namespace std; int main (int, char*[]) { int i; // cout == std ostream cout << “how many? ” << endl; // cin == std istream cin >> i; cout << “You said ” << i << “. ” << endl; return 0; } • <iostream> header file – Use istream for input – Use ostream for output • Overloaded operators << ostream insertion operator >> istream extraction operator • Other methods – ostream: write, put – istream: get, eof, good, clear • Stream manipulators – ostream: flush, endl, setwidth, setprecision, hex, boolalpha CSE 232: Moving Data Within a C++ Program

Review: C++ File I/O Stream Classes #include <fstream> using namespace std; int main () { ifstream ifs; ifs. open (“in. txt”); ofstream ofs (“out. txt”); if (ifs. is_open () && ofs. is_open ()) { int i; ifs >> i; ofs << i; } ifs. close (); ofs. close (); return 0; } • <fstream> header file – Use ifstream for input – Use ofstream for output • Other methods – open, is_open, close – getline – seekg, seekp • File modes – in, out, ate, app, trunc, binary CSE 232: Moving Data Within a C++ Program

Redirecting File Output • Exercise: printing to a file vs. to stdout – – Use the standard syntax for main that we used last week Program always writes out “hello, world!” If argc > 1 writes to file whose name is given by argv[1] Otherwise writes to standard output CSE 232: Moving Data Within a C++ Program

Review: C++ string Class #include <iostream> #include <string> using namespace std; int main (int, char*[]) { string s; // empty s = “”; // empty s = “hello”; s += “, ”; s = s + “world!”; cout << s << endl; return 0; } • • <string> header file Various constructors Assignment operator Overloaded operators += + < >= == [] • The last one is really useful: indexes string if (s[0] == ‘h’) … CSE 232: Moving Data Within a C++ Program

Review: C++ String Stream Classes #include <iostream> • #include <fstream> #include <sstream> using namespace std; • int main () { ifstream ifs (“in. txt”); if (ifs. is_open ()) • { string line_1, word_1; getline (ifs, line_1); istringstream iss (line_1); iss >> word_1; cout << word_1 << endl; } return 0; } <sstream> header file – Use istringstream for input – Use ostringstream for output Useful for scanning input – Get a line from file into string – Wrap string in a stream – Pull words off the stream Useful formatting output – Use string as format buffer – Wrap string in a stream – Push formatted values into stream – Output formatted string to file CSE 232: Moving Data Within a C++ Program

Using C++ String Stream Classes #include <string> #include <cstring> #include <sstream> using namespace std; int main (int argc, char *argv[]) { if (argc < 3) return 1; ostringstream argsout; argsout << argv[1] << “ ” << argv[2]; istringstream argsin (argsout. str()); float f, g; argsin >> f; argsin >> g; cout << f << “ / ” << g << “ is ” << f/g << endl; return 0; } • Program gets arguments as C -style strings • But let’s say we wanted to input floating point values from the command line • Formatting is tedious and error -prone in C-style strings (sprintf etc. ) • iostream formatting is friendly • Exercise: check whether any of the strings passed by argv are unsigned decimal integers (leading zeroes still ok) – print their sum if there any – otherwise print the value 0 CSE 232: Moving Data Within a C++ Program

In-Memory “(in core)” Formatting • Exercise: read and translate a file – Read integers and booleans (“true”, “false”) from a file • Test by writing your own test file with different combinations – Use a string to get one line of data at a time – Use a string stream to extract space separated tokens into another string variable – Check whether each token is a boolean (if not treat as int) • Convert to local variable of that type using another string stream • Printout whether it’s a boolean or an integer, and print out the value of the local variable, making sure to preserve formatting CSE 232: Moving Data Within a C++ Program

A Couple More Things to Try • Exercise: printing out text from a named file – Open a text file whose name is given in argv – Print out the contents of the file to standard output – Detect the end of the file • Stop reading text, close the named file, and end the program • Exercise: typing text into a named file – Read text from the standard input stream – Put the text into a file whose name is given by argv[1] – Detect when the user types in the character sequence q! • Stop reading text, close the named file, and end the program CSE 232: Moving Data Within a C++ Program