Pergunta

Eu sei que é possível obter uma parte de um ficheiro .txt, em seguida, convertê-lo para um número inteiro, em seguida, armazená-lo em uma variável, mas é possível para que em uma única declaração. (As necessidades variáveis ??para ser global).

Ou seja:

[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;
}
Foi útil?

Solução

Não, você não pode fazê-lo em uma única declaração. Você pode escrever uma função para fazer isso, e então você pode inicializar variáveis ??locais com essa função, mas você não pode inicializar variáveis ??globais com ele. Se você quiser inicializar as variáveis ??globais, você precisa explicitamente fazê-lo durante a rotina de inicialização do seu programa, ou você pode fazê-lo no construtor de um objeto global (não recomendado).

Outras dicas

Do ponto de vista do compilador, um constante é algo que tem um valor fixo em tempo de compilação. Desde que você está lendo os dados de um arquivo de texto (que pode ser alterado depois que o programa foi compilado), os números que ler a partir do arquivo de texto não podem ser constantes em seu programa.

Dito isto, você poderia fazer algo parecido com isto:

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);

O acima baseia-se na inicialização do compilador do C ++ faz para as classes globais. Como consequência disto, você está à mercê de compilador do C ++ com relação à ordem de classe de inicialização. Além disso, o tratamento de erros neste arranjo pode ser problemático. (Por exemplo, o que acontece se data.txt não existe?)

Se bem entendi você quer ler em parte de um arquivo de texto e armazenar o valor como uma constante? Bem, você não pode ter uma constante não inicializada -. Por isso uma declaração global para que você atribuir em tempo de execução

Talvez a maneira de fazer isso é encapsular essa funcionalidade que você tem em uma função global chamado dizer getConstant, este poderia conter uma variável estática ea chamada para getConstant iria verificar se o var foi lido a partir do arquivo, se ele tiver em seguida, retornar a constante, se não lidos do arquivo. avaliação preguiçosa. Claro que isso não resolve a questão de que a necessidade (?) Para ser constante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top