我知道可以获取.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;
}
答案 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是否已从文件中读取,如果有然后返回常量,如果没有从文件读入。懒惰的评价。当然,这并不能解决需要(?)保持不变的问题。