C ++从文本文件中读取多个整数

时间:2014-03-16 18:48:21

标签: c++ input integer int

我是一名C ++初级学生,我很难让我的代码从文本文件中读取多个整数。

我的任务是获取预先存在的代码(我在下面发布的代码)并对其进行修改,以便从用户的输入中读取,而不是从文本文件中读取。

主要问题是我在虚拟getNumber函数中有所作为。它最初只是一个简单的cin语句,它读取用户输入的20个数字,将它们带入主函数,在另一个函数中处理它们,然后在最后一个函数中打印结果。

我已修改代码以成功读取文本文件,但是,它只读取文本文件的第一个值(ex文本文件读取:1 2 3 4 ... 20),输出显示:1 1 1 1 1 ...

我一直在寻找解决方案几个小时,不幸的是,很多回复都要求我不熟悉的事情。看来我需要建立一些类型的循环?我不确定。

谢谢!

#include <iostream> 
#include <iomanip>
#include <fstream>

using namespace std;

 const int N = 20;   

    //Function prototypes
void initialize(int& zeroCount, int& oddCount, int& evenCount);
void getNumber(int& num);
void classifyNumber(int num, int& zeroCount, int& oddCount, 
                    int& evenCount);
void printResults(int zeroCount, int oddCount, int evenCount);

int main ()
{
        //Variable declaration
    int counter; //loop control variable 
    int number;  //variable to store the new number 
    int zeros;   //variable to store the number of zeros 
    int odds;    //variable to store the number of odd integers 
    int evens;   //variable to store the number of even integers 



    initialize(zeros, odds, evens);                 //Step 1

    cout << "Please enter " << N << " integers."
         << endl;                                   //Step 2
    cout << "The numbers you entered are: "
         << endl;

    for (counter = 1; counter <= N; counter++)      //Step 3
    {
        getNumber(number);                          //Step 3a
        cout << number << " ";                      //Step 3b
        classifyNumber(number, zeros, odds, evens); //Step 3c
    }// end for loop 

    cout << endl;

    printResults(zeros, odds, evens);               //Step 4

    return 0;
}

void initialize(int& zeroCount, int& oddCount, int& evenCount)
{
    zeroCount = 0;
    oddCount = 0;
    evenCount = 0;
}

void getNumber(int& num)
{
    ifstream inData;


    inData.open("inputfile.txt");
    inData >> num;




}

void classifyNumber(int num, int& zeroCount, int& oddCount,
                    int& evenCount)
{
    switch (num % 2)
    {
    case 0: 
        evenCount++;  
        if (num == 0)
            zeroCount++;  
        break;
   case 1: 
   case -1: 
       oddCount++;
   } //end switch
} //end classifyNumber

void printResults(int zeroCount, int oddCount, int evenCount)
{ 

    ofstream outData;


    outData.open("outputfile.txt.");

    outData << "There are " << evenCount << " evens, "
         << "which includes " << zeroCount << " zeros"
         << endl;

    outData << "The number of odd numbers is: " << oddCount
         << endl;
    outData.close();
} //end printResults

2 个答案:

答案 0 :(得分:1)

问题是在getNumber函数中,每次调用它时都会打开文件。这使得它每次都从头开始阅读。

答案 1 :(得分:0)

每次在getNumber函数内部打开文件时会发生什么。 这样做,您始终从头开始阅读文件。你想要做的是每次读取下一个整数而不是同一个整数。为此,您可以从main函数打开文件,并将ifstream传递给getNumber函数。

int main ()
{
    ...

    ifstream inpStream;
    inpStream.open("inputfile.txt");

    for (counter = 1; counter <= N; counter++)      //Step 3
    {
        getNumber(number, inpStream);                          //Step 3a
        cout << number << " ";                      //Step 3b
        classifyNumber(number, zeros, odds, evens); //Step 3c
    }// end for loop 

    return 0;
}

void getNumber(int& num, istream& inpStream)
{
    inpStream >> num;
}

请注意,通过这种方式,您可以将inpStream定义为cin,它也会起作用。这是因为getNumber函数会引用istreamcin是)。