Tom Kelliher, CS17
May 6, 1996
Example: Read positive integer values (at most 3) from the user and print them in reverse order. Use -1 as a sentinel value.
const int MAX = 3;
int data[MAX];
int count = 0;
int i;
cout << "? ";
cin >> data[count];
while (count < MAX && data[count] != -1)
{
++count;
cout << "? ";
cin >> data[count];
}
for (i = count - 1; i >= 0; --i)
cout << data[i] << endl;
Importance of count.
New include files and new variable types:
#include <fstream.h> ifstream in; // Input file variable type. ofstream out; // Output file variable type.
Difference between file name and file variable.
Important functions:
/**********************************************************************
* fileio.cc
* Tom Kelliher
*
* This is a small program that demonstrates a number of things:
* o How to use an array as a function parameter. Note that arrays
* are ALWAYS passed by reference.
* o How to use the getline() function with cin to read an entire
* line from cin.
* o How to use the open() and fail() functions with an ifstream
* variable (in).
* o How to read numbers from a disk file bound to an ifstream
* variable.
* o How to use eof() to test for reaching the end of a file.
* o How to use close() to close a file.
**********************************************************************/
#include <fstream.h>
#include <iostream.h>
const int MAX = 100; // Maximum number of data elements.
const int LINE = 80; // Maximum length of a single keyboard input.
// Prototype.
int getInputs(int data[], int max);
/**********************************************************************
* main()
**********************************************************************/
int main()
{
int d[MAX]; // The data.
int count; // How much data.
int i; // Index variable.
count = getInputs(d, MAX);
cout << "Read " << count << " items:\n";
// Just print the data out.
for (i = 0; i < count; ++i)
cout << "Element " << i << ": " << d[i] << endl;
return 0;
}
/**********************************************************************
* getInputs() --- read integers from a file into an array.
*
* Preconditions: data is an int array with at least max elements.
* Postconditions: After querying for the name of an input file and
* opening the file, integers are read from the file into the array.
* At most max elements are read. The file is closed and the count of
* numbers read is returned.
**********************************************************************/
int getInputs(int data[], int max)
{
int count = 0; // How many numbers read?
char name[LINE]; // Used to store the filename.
ifstream in; // Our file variable.
// Get a filename and try to open the file.
do
{
cout << "File name: ";
cin.getline(name, LINE);
in.open(name);
} while (in.fail());
// Read until we've filled the array or we reach end-of-file.
while (count < max && !in.eof())
{
in >> data[count];
++count;
}
// If we reached eof, the count will be off by one. Fix it.
if (in.eof())
--count;
in.close();
return count;
}
Again, must use #include <fstream.h>.
/**********************************************************************
* putInputs() --- write integers from an array to a file.
*
* Preconditions: data is an int array with at least max elements.
* Postconditions: After querying for the name of an output file and
* opening the file, integers are written from the array to the file.
* At most max elements are written. The file is then closed.
**********************************************************************/
void putInputs(int data[], int max)
{
int count; // How many numbers written
char name[LINE]; // Used to store the filename.
ofstream out; // Our file variable.
// Get a filename and try to open the file.
do
{
cout << "File name: ";
cin.getline(name, LINE);
out.open(name);
} while (out.fail());
// Write until we've written the entire array.
for (count = 0; count < max; ++count)
out << data[count] << endl;
out.close();
}
Two sorting orders:
Many, many sorting ``algorithms.''
We'll use ascending ``bubble sort:''
Demonstration. Sort 10, 4, 6, 2.
Code:
void sort(int list[], int size);
void swap(int& a, int& b);
/**********************************************************************
* sort --- Use bubble sort to sort an array of ints.
*
* Preconditions: list is an int array of at least size elements.
* Postconditions: list is sorted in ascending order.
**********************************************************************/
void sort(int list[], int size)
{
int pass; // Number of pass.
int i; // Index variable.
// Do size - 1 passes.
for (pass = 1; pass < size; ++pass)
// On each pass, compare size - pass pairs of elements.
for (i = 0; i < size - pass; ++i)
if (list[i] > list[i + 1])
swap(list[i], list[i + 1]); // Swap if out of ascending
// order.
}
/**********************************************************************
* swap --- swap 2 ints.
*
* Preconditions: a and b are ints.
* Postconditions: a's and b's values have been swapped.
**********************************************************************/
void swap(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}