0

我知道它可以获取 .txt 的一部分,然后将其转换为整数,然后将其存储在变量中,但是否可以在单个声明中实现。(变量需要是全局的)。

IE:

[data.txt]
1020
[convert_data.cpp]
#include<fstream>
fstream convert("data.txt");
//way to declare something equal to A PARTICULAR POINT in data.txt

int main()
{
    //how would I take this block of code and simplify it to two DECLARATIONS (not
    //function calls), or, if that's not possible or not practical, how would I make
    //n and m (or var1 and var2) global AND CONSTANT?
    char var1[5];
    convert.getline(var1,2);
    char var2[5];
    convert.getline(var2,2);
    const int n=atoi(var1);
    const int m=atoi(var2);
    return 0;
}
4

3 回答 3

0

从编译器的角度来看,常量是在编译时具有固定值的东西。由于您正在从文本文件中读取数据(可以在程序编译后更改),因此您从文本文件中读取的数字在程序中不能是常量。

话虽如此,您可以执行以下操作:

class ConstInteger {
public:
    ConstInteger(fstream &f) {
        char s[5];
        f.getline(s,2);
        value = atoi(s);
    }
    public operator int() const { return value; }
private:
    int value;
};

fstream convert("data.txt");
ConstInteger n(convert);

以上依赖于 C++ 编译器对全局类所做的初始化。因此,在类初始化顺序方面,您在很大程度上受 C++ 编译器的支配。此外,这种安排中的错误处理可能很麻烦。(例如,如果data.txt不存在会发生什么?)

于 2009-05-05T04:09:29.557 回答
0

不,你不能在一个声明中做到这一点。您可以编写一个函数来执行此操作,然后您可以使用该函数初始化局部变量,但您不能使用它初始化全局变量。如果要初始化全局变量,则需要在程序的初始化例程中显式执行此操作,或者您可以在全局对象的构造函数中执行此操作(不推荐)。

于 2009-05-05T04:12:47.803 回答
0

如果我理解正确,您想读取文本文件的一部分并将值存储为常量?那么你不能有一个未初始化的常量 - 所以你在运行时分配一个全局声明。

也许这样做的方法是将您拥有的功能封装在一个名为 getConstant 的全局函数中,这可能包含一个静态变量,并且对 getConstant 的调用将检查该 var 是否已从文件中读取,如果它已返回常量,如果没有从文件中读入。懒惰的评价。当然,这并不能解决它需要 (?) 保持不变的问题。

于 2009-05-05T04:18:39.257 回答