我是一名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
答案 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
函数会引用istream
(cin
是)。