1

仍然是 C++ 的初学者,我不知道如何使用fstream. 我想从一个文件或一个文件double中为我的程序中的一组变量赋值(出于实际原因可能会更好。).txt.csv.csv

假设我的input_file.csv样子是这样的:

10
0
20
0.4
0.1333382222
0
0.5
10
20
0.76
0.3
0.1
0.2

这些值应分配给0我的代码中的以下变量(首先声明为等于):

/// geometry
double Dist=0; ///Distance between the 2

double PosAi = 0;
double PosAo = 0;
double PosBi = 0;
double PosBo = 0; ///positions i/o

/// densities

double iDA=0;
double oDA=0;
double iDAtop=0;
double oDAtop=0; /// Left

double iDB=0;
double oDB=0;
double iDBtop=0;
double oDBtop=0; /// Right

我想读取 的值input_file.csv并将它们分配给我的变量,这样如果我输入:

cout<<Dist<<" "<<PosAi<<" "<<PosAo<<" "<<

...........ETC。;

我在控制台上得到以下列表:

10 0 20 0.4 0.1333382222 0 0.5 10 20 0.76 0.3 0.1 0.2

但是我不知道如何使用 fsteam ,请您帮忙吗?谢谢!


好的,如果像我这样的初学者遇到同样的问题,这就是答案:

#include <iostream>
#include <fstream>
using namespace std;

/// geometry

double Dist=0; ///Distance between the 2
double PosAi = 0;
double PosAo = 0;
double PosBi = 0;
double PosBo = 0; ///positions i/o

/// densities

double iDA=0;
double oDA=0;
double iDAtop=0;
double oDAtop=0; /// Left
double iDB=0;
double oDB=0;
double iDBtop=0;
double oDBtop=0; /// Right

int main()
{
ifstream ifs ("input.csv");
if (!ifs)
    // process error
ifs >> Dist;
ifs >> PosAi;
ifs >> PosAo;
ifs >> PosBi;
ifs >> PosBo;
ifs >> iDA;
ifs >> oDA;
ifs >> iDAtop;
ifs >> oDAtop;
ifs >> iDB;
ifs >> oDB;
ifs >> iDBtop;
ifs >> oDBtop;

    // print variables

    cout << Dist << " " << PosAi << " " << PosAo << " " << PosBi << " " << PosBo << " " << iDA << " " << oDA << " " << iDAtop << " " << oDAtop << " " << iDB << " " << oDB << " " << iDBtop << " " << oDBtop << endl;
}

谢谢

4

3 回答 3

1

首先,您不(通常)fstream为此使用an ,而是使用ifstream. 而且您通常不会直接访问它,而是通过istream&; 就像ofstreamostream,ifstream derives fromistream , so that you can use istream&` 派生的一样,独立于流的类型。

最后,对于 an 上的每个<<运算符,在 anostream上都有一个相应的>>运算符istream,所以如果你可以做 std::cout << x,你可以做input >> x(​​当然,你通常不做std::cout << x,你做output << x,哪里 outputostream&传递给函数的 - 也许 std::cout,但也许是一个std::ofstream,或其他一些 ostream)。当然存在差异:输出通常比输入更容易,因为您控制源(您的变量);输入需要大量的错误检查,因为你可以接收到任何东西。特别是,在您验证输入成功之前,您永远不能使用任何输入值。在输出的情况下,你通常只做一次,在输出结束时(最后一次刷新到 std::cout,或在关闭std::ofstream) 之后。

于 2013-07-15T14:37:03.880 回答
1
ifstream ifs ("input_file.txt");
if (!ifs)
    // process error
ifs >> DISTAB;
ifs >> POSAstart;
....
于 2013-07-15T14:00:46.920 回答
1

如果您知道如何使用 打印一堆变量cout,那么您就知道如何使用输入流读取它们——情况正好相反。只需反转您的cout通话箭头:

myInputFile >> Dist >> PosAi >> PosAo >> ...;

请注意,输入流只能将实际变量作为参数>>,而输出流可以采用临时变量,例如您如何使用<< " ". 但幸运的是,输入流会自动吃掉空格,所以你可以忽略它。因此,我在上一行中的示例是正确的。

此外,cout在 中预先声明iostream,但您需要声明您的输入流。ifstream将要读取的文件名作为其第一个参数:

ifstream myInputFile ("input_file.csv");
于 2013-07-15T14:33:26.453 回答