当我打印我的阵列时,它会打印,但最后会有额外的数据。额外数据是应该存在的最后一行输出之后的一行。它包含:“ - 13096448”(注意,它以空格开头。)
/***************************************************/
/* 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;
}
数据文件:
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
答案 0 :(得分:1)
检查转换是否成功。
bool input (ifstream &infile, string &names, int &numoftoys)
{
infile >> names;
if (infile.fail()) return false;
infile >> numoftoys;
if (infile.fail()) return false;
return true;
}
所以你可以使用它:
if (input(...)) { /* valid data */ }
答案 1 :(得分:1)
输入循环存在多个问题。它可能应该读取如下内容:
while ((infile >> names[i]) && (infile >> numoftoys[i]))
{
++i;
}
这可以避免在输入失败时以及文件末尾有空行时处理额外的行(在这种情况下,最终的.eof()
测试会成功,而input(...)
会在失败时失败递增i
。