Tom Kelliher, CS17
May 3, 1996
Ranges, defaults for signed, unsigned?
Ranges, precisions? ((6, 38), (19, 4,932)).
Definition:
An array is a collection of objects (variables), all of the same type. Individual members (called ``elements'') of the collection are accessed by number. This number is known as the ``index'' or ``subscript'' of the element. The first element of an array always has the index 0. If an array has n elements, then the last element will have index n - 1.
When would you use an array?
The key is the [ and ]:
int a[10]; // Array of 10 integers. None are assigned any initial
// value.
char b[6] = { 'H', 'e', 'l', 'l', 'o', '\0' } // Array of 6 chars,
// initialized with the literal string "Hello". Note the
// null character.
char c[6] = "Hello"; // Array of 6 chars, also initialized to a
// literal string.
double d[] = { 3.4e5, -12.3, 1.4e-9 }; // Array of 3 doubles,
// initialized to given values.
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;
}
Write a program to write the numbers from 1 to n (ask the user for the value to use for n) to a disk file.