.txt의 한 지점에서 문자/문자열을 반환하는 함수가 있습니까?
문제
나는 .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;
}
해결책
아니요, 단일 선언에서는 할 수 없습니다. 이를 위해 함수를 작성할 수 있으며 해당 기능으로 로컬 변수를 초기화 할 수 있지만 전역 변수를 초기화 할 수는 없습니다. 글로벌 변수를 초기화하려면 프로그램의 초기화 루틴 중에 명시 적으로 그렇게하거나 글로벌 객체의 생성자 (권장되지 않음)에서 수행 할 수 있습니다.
다른 팁
컴파일러의 관점에서 끊임없는 컴파일 시간에 고정 된 값이있는 것입니다. 텍스트 파일에서 데이터를 읽고 (프로그램이 컴파일 된 후에 변경할 수 있음) 텍스트 파일에서 읽은 숫자는 프로그램에서 상수가 될 수 없습니다.
당신은 그렇게 말했습니다 ~할 수 있었다 다음과 같이하십시오 :
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
존재하지 않는다?)
내가 올바르게 이해하면 텍스트 파일의 일부에서 읽고 값을 상수로 저장하고 싶습니까? 글쎄, 당신은 초기화되지 않은 상수를 가질 수 없으므로 런타임에 할당 할 글로벌 선언.
아마도 그렇게하는 방법은 Say GetConstant라는 글로벌 함수에서 가지고있는 기능을 캡슐화하는 것입니다. 여기에는 정적 변수가 포함될 수 있으며 GetConstant를 호출 할 수 있습니다. 파일에서 VAR이 읽은 지 확인합니다. 파일에서 읽지 않으면 상수. 게으른 평가. 물론 이것은 필요가 일정 해야하는 문제를 해결하지 못합니다.