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

Reading different types of variables from a file in C++

本文关键字:同类型 变量 读取 C++ 文件      更新时间:2023-10-16

我在C++中的代码有问题,需要一些帮助。有一些相关的问题,但我无法真正理解答案。我有一个文本文件(下面的示例中的"参数.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();

注释似乎毁了一切,即使没有它们,正确阅读逻辑变量似乎也存在一些问题。我尝试读取的文件是由我制作的,因此如有必要,我可以用其他内容替换上面的"//"。有人有什么建议吗?

提前感谢!

简单、俗气的方式:

读取令牌,然后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');

更好,但您可能希望使用比打印行更好的方法处理错误。

动态字符数组中输入,然后运行一个 for 循环,其中如果一个字符具有 ascii 65 - 97 - 以后,那么它将是字母表,否则如果 ascii 表示像 1,2,3 这样的整数,然后在计算总整数为 count++ 后将它们分隔到另一个数组中。