我的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();
这些评论似乎毁了所有内容,即使没有它们,似乎也会出现一些正确读取逻辑变量的问题。我尝试阅读的文件是由我制作的,因此如果需要,我可以用上面的'//'代替。有没有人有任何建议?
提前致谢!
答案 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则将它们分成另一个数组将总整数计算为计数++。