从C ++中的文件中读取不同类型的变量

时间:2016-02-04 17:03:21

标签: c++ comments text-files

我的C ++代码存在问题,需要一些帮助。有一些相关的问题,但我无法真正理解答案。 我有一个文本文件(下面的例子中的'parameters.dat'),我想用C ++编写的代码读入。该文件包含不同类型的变量:布尔值,双精度数和整数以及一些我想在阅读时跳过的注释。 我的文件看起来像这样:

150    // this is an integer    
4e-1   // this is a double    
1.05   // another double   
0      // this is a logical (Boolean) variable: 0 is false and 1 is true

我使用的代码的简单版本是

int N;
double var_1, var_2;
bool inital;

ifstream read_parameters;
read_parameters.open("parameters.dat");
read_parameters >> N >> var_1 >> var_2 >> initial;
read_parameters.close();

这些评论似乎毁了所有内容,即使没有它们,似乎也会出现一些正确读取逻辑变量的问题。我尝试阅读的文件是由我制作的,因此如果需要,我可以用上面的'//'代替。有没有人有任何建议?

提前致谢!

2 个答案:

答案 0 :(得分:0)

简单,俗气的方式:

读取令牌然后read_parameters.ignore(numeric_limits<streamsize>::max(), '\n')以丢弃该行的其余部分。例如:

read_parameters >> N;
read_parameters.ignore(numeric_limits<streamsize>::max(), '\n');
read_parameters >> var_1;
read_parameters.ignore(numeric_limits<streamsize>::max(), '\n');
...

这不关心是否存在评论,但如果您在一条线上有两个或更多标记,则需要修改。

哦,记得在阅读后测试流的状态。为其中一个双打插入“fubar”目前会毁掉一些东西。 read_parameters将处于错误状态,需要先将其清除才能再次阅读。

if (!read_parameters >> N)
{
    std::cerr << "bad input for parameter N" << std::endl;
    read_parameters.clear();
}
read_parameters.ignore(numeric_limits<streamsize>::max(), '\n');

更好,但您可能希望使用比printline更好的处理错误。

答案 1 :(得分:0)

在动态字符数组中输入然后运行一个for循环,如果一个字符有ascii 65 - 97 - 那么它将是Alphabet,否则如果ascii代表整数,如1,2,3则将它们分成另一个数组将总整数计算为计数++。