Reputation: 425
When i go to print my array it prints, but there is extra data at the end. The Extra Data is one line after the last line of output that should be there. it contains:" -13096448" (note, it starts with a space.)
/***************************************************/
/* Author: Sam LaManna */
/* Course: */
/* Assignment: Program 6 Elves */
/* Due Date: 12/9/11 */
/* Filename: program6.cpp */
/* Purpose: Write a program that will process */
/* the work done by santas elfs */
/***************************************************/
#include <iostream> //Basic input/output
#include <iomanip> //Manipulators
#include <string> //String stuff
#include <fstream> //File input/output
using namespace std;
void instruct (); //Function Declaration for printing instructions
void input (ifstream &infile, string &names, int &numoftoys); //Function declaration for getting data from file
void headers (); //Prints headers
int main()
{
string names [50]; //Array for storing names
int numoftoys [50]; //Array for storing the number of toys made
int i = 0;
int p = 0;
ifstream infile("elves.dat"); //Opens input file "elves.dat"
instruct(); //Function call to print instructions
while (!infile.eof())
{
input (infile, names[i] , numoftoys[i]);
++i;
}
for (int p = 0; p<i; p++)
{
cout << names[p] << " " << numoftoys[p] << "\n";
}
return 0;
}
/***************************************************/
/* Name: instruct */
/* Description: Prints instructions to user */
/* Parameters: N/A */
/* Return Value: N/A */
/***************************************************/
void instruct ()
{
cout << "\n" << "This program will calculate the toys made by santas elfs and assign" << "\n";
cout << "a rating to each elf. It will also sort them and print average, min and max." << "\n";
cout << "\n" << "Make sure you have a file named elves.dat in the same directory as";
cout << " this porgram or you will recieve errors.";
cout << "\n" << "\n";
return;
}
/***************************************************/
/* Name: input */
/* Description: Reads from file */
/* Parameters: N/A */
/* Return Value: N/A */
/***************************************************/
void input (ifstream &infile, string &names, int &numoftoys)
{
infile >> names;
infile >> numoftoys;
// infile.ignore ('\n');
return;
}
Data File:
Smiley 662
Curley 88
Clementine 335
Jasper 105
Lucinda 775
Brunhilda 103
Florence 441
Oskar 820
Snowflake 990
Bernard 690
Punch 298
Chuckie 10
Frosty 102
Snowman 311
April 830
Merry 299
Sunshine 331
Buddy 1234
Carol 271
Misty 111
Harold 52
Henry 292
Twinkle 308
Starlight 703
Burr 112
Angelica 444
Bluenose 689
Harry 254
Twinkle 259
Stardust 121
Greensleeves 453
Noel 312
Happy 209
Yukon 534
Snowcap 190
Northpole 598
Upvotes: 1
Views: 214
Reputation: 45254
There are multiple problems with the input loop. It should probably read something like the following:
while ((infile >> names[i]) && (infile >> numoftoys[i]))
{
++i;
}
This avoids processing an extra line when the input fails and when there is a blank line at the end of the file (in which case the final .eof()
test would succeed and input(...)
would fail while still incrementing i
.
Upvotes: 1
Reputation: 98088
check if the conversion succeeds.
bool input (ifstream &infile, string &names, int &numoftoys)
{
infile >> names;
if (infile.fail()) return false;
infile >> numoftoys;
if (infile.fail()) return false;
return true;
}
so you can use it like:
if (input(...)) { /* valid data */ }
Upvotes: 1