是否有一个函数在.txt中的某个点返回字符/字符串?

时间:2009-05-05 04:02:37

标签: c++ text int constants global

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

即:

[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;
}

3 个答案:

答案 0 :(得分: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不存在会发生什么?)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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