//到目前为止,这是我的代码
//在这里,我简单地记录了一个包括小数字在内的多个文件
ifstream infile;
infile.open("Numbers.txt");
if (!infile) {
cout << "Unable to open the file" << endl;
return;
}
//创建矢量以存储这些数字
vector<int> iNumbers;
vector<double> dNumbers;
if (infile) {
int i;
double d;
while (infile >> i && infile >> d) {
iNumbers.push_back(i);
dNumbers.push_back(d);
}
infile.close();
}
/ * 现在尝试将这些数字打印或放入两个不同的文件中,将整数字放入整数.txt并将双重内容放在doubles.txt中 * /
ofstream integerOut("integer.txt");
vector<int>::iterator ii;
for (ii = iNumbers.begin(); ii != iNumbers.end(); ++ii)
{
if (ii = int {
}
integerOut << *ii << endl;
cout << *ii << endl;
}
integerOut.close();
ofstream doubleOut("double.txt");
vector<double>::iterator dd;
for (dd = dNumbers.begin(); dd != dNumbers.end(); ++dd)
{
doubleOut << *dd << endl;
cout << *dd << endl;
}
doubleOut.close();
}
//我的代码仅为我的integer.txt文件提供了第一个两个数字,并为我的double.txt提供了最后一个数字。我做错了什么?
进一步说明: 我有一个名为Numbers.txt的文件,其中包含数字
1
5
9.4
3
4
6.3
5
2.2
我正在使用整数并尝试将它们放入interger.txt文件中,我将双打并将它们放入double.txt文件中。但在我的代码中,我收到的是整数
1
2
9
3
4
6
5
2
当我想收到
时1
5
3
4
5
仅
答案 0 :(得分:1)
您可以使用标准算法std::copy
。例如
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
//...
std::ofstream integerOut( "integer.txt" );
if ( integerOut )
{
std::copy( iNumbers.begin(), iNumbers.end(),
std::ostream_iterator<int>( integerOut, " " ) );
}
std::ofstream doubleOut( "double.txt" );
if ( doubleOut )
{
std::copy( dNumbers.begin(), dNumbers.end(),
std::ostream_iterator<double>( doubleOut, " " ) );
}
或者您可以编写一个代码来自己控制输出。例如
#include <iostream>
#include <fstream>
//...
std::ofstream integerOut( "integer.txt" );
for ( int x : iNumbers )
{
if ( !( integerOut << x << ' ' ) ) break;
}
std::ofstream doubleOut( "double.txt" );
for ( double x : dNumbers )
{
if ( !( doubleOut << x << ' ' ) ) break;
}
至于输入那么我已经理解了两个整数后跟文件中的一个双精度。所以你需要相应地阅读数字。
int i1, i2;
double d;
bool valid = true;
while ( valid )
{
if ( valid = infile >> i1 ) iNumbers.push_back( i1 );
if ( valid && ( valid = infile >> i2 ) ) iNumbers.push_back( i2 );
if ( valid && ( valid = infile >> d ) ) dNumbers.push_back( d );
}
如果您不知道文件中的下一个数字是整数还是双数,您可以通过数字中存在句点来解除它们。例如
std::string value;
while ( infile >> value )
{
if ( value.find( '.' ) != std::string::npos )
{
double d = std::stod( value );
dNumbers.push_back( d );
}
else
{
int i = std::stoi( value );
iNumbers.push_back( i );
}
}