Ir ao conteúdo
  • Cadastre-se

C++ Preciso que o ofstream puxe a palavra de uma string pra nomear o arquivo.


Posts recomendados

Olá pessoal boa noite, eu preciso a função ofstream puxe o nome de uma string, para nomear o arquivo txt

 

ofstream input("nome.txt",ios::app);

Ao invés da função acima, gostaria que ficasse dessa forma

ofstream input("%s.txt",ios::app);

 

O codigo acima é apenas um exemplo, o %s é uma string que recebe um nome, mas no exemplo acima não funciona, se alguém souber como consigo fazer isso.

 

espero que tenham entendido.

 

desde já agradeço a todos.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@aksjnnuhbaueh cjas   entendi , que você quer criar um arquivo "txt" , cujo nome possa ser inserido de acordo com a necessidade , assim pegar o nome pelo teclado e depois escrever ou ler um arquivo , e sendo isso assim mesmo , você pode usar uma string :

string x = "ofstream";
ofstream ofs("x.txt");

 

Link para o comentário
Compartilhar em outros sites

C++ reference  é tido como o manual oficial online do C++

 

Sobre ofstream tem um pequeno exemplo lá

 

#include <fstream>
#include <utility>
#include <string>
int main()
{
    std::ofstream f0;
    std::ofstream f1("test.bin", std::ios::binary);
    std::string name = "example.txt";
    std::ofstream f2(name);
    std::ofstream f3(std::move(f1));
}

 

e mostra alguns dos 7 construtores.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@aksjnnuhbaueh cjas      sim ,   boa ideia que você teve , e pode ser como @arfneto  explicou ,   ou se quiser , você  pode , também  ,  usar a biblioteca string de linguagem c para fazer isso , 

#include <string.h>
  
  char y[20];
  strcpy(y , "ofstream.txt");
  /// string x = "ofstream.txt";  esse string não funciona
  ofstream input(y,ios::app);

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010

#include<string.h>
int main()
{
char y[20]="nome";
string a="Marcelo",b="Santos";

strcat(y, ".txt");
  ofstream input(y,ios::app);
  input<<a<<b;
}

 

Da forma que você demonstrou em cima, ainda não tava bem como eu queria, dai ao invés de utilizar o strcpy, eu utilizei strcat, dai o arquivo sai certinho como eu queria.

 

valeu pela ajuda!!!

  • Amei 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, devair1010 disse:

 ou se quiser , você  pode , também  ,  usar a biblioteca string de linguagem c para fazer isso

 

Não há razão pra fazer isso. Evite usar stdio ou string ou qualquer header de C. E se precisar mesmo use a convenção de colocar um c na frente e não use o .h, por exemplo use cstdio.

 

Mas não entendo porque estão sequer considerando isso.

 

Leram o exemplo que mostrei? Viram o manual por uns minutos ao menos, no link que eu mostrei?

 

Isso
 

1 hora atrás, aksjnnuhbaueh cjas disse:
  ofstream input(y,ios::app);
  input<<a<<b;

 

É bem estranho:

 

qual o propósito de chamar um arquivo de saída de "input" que significa entrada?

 

1 hora atrás, aksjnnuhbaueh cjas disse:
char y[20]="nome";
string a="Marcelo",b="Santos";

strcat(y, ".txt");

 

Não há razão para escrever isso. Em C++ strings tem o operador + redefinido para o simples: concatenar strings.  Pode escrever só:

 

    string y = "nome";
    y += ".txt"; // concatenando em C++
    cout << "Arquivo: " << y << "\n";

 

E o construtor de ofstream aceita string ou vetor de char, está lá no manual. Então tanto faz

 

3 horas atrás, devair1010 disse:
  /// string x = "ofstream.txt";  esse string não funciona

 

O que não funciona? Que significa?

 

EXEMPLO

 

Esse programa mostra um pouco dessas coisas: 

 

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    // abre com vetor de char
    char yC[] = "nome.txt";
    ofstream arquivo(yC);
    arquivo.close();

    // abre com string o mesmo arquivo
    string yCPP = yC;
    arquivo.open(yCPP);

    string y = "nome";
    y += ".txt"; // concatenando em C++
    cout << "Arquivo: " << y << "\n";

    std::string a = "Marcelo", b = "Santos";
    cout << "Gravando \"" << a << "," << b << "\"\n";
    arquivo << a << "," << b;
    arquivo.close();

    cout << "Abrindo \"" << y << "\" para leitura\n\n";
    ifstream saida(y);
    string   algo{};
    while (not saida.eof())
    {
        getline(saida, algo);
        cout << "Leu \"" << algo << "\"\n";
    }
    cout << "Final de \"" << y << "\"\n";
    return 0;
}

 

Mostra

 

Arquivo: nome.txt
Gravando "Marcelo,Santos"
Abrindo "nome.txt" para leitura

Leu "Marcelo,Santos"
Final de "nome.txt"

 

Não há nada demais em programar em C ao invés de C++, nem em programar em C++ ao invés de C.

 

Mas é melhor fazer uma opção e segui-la. C++ não é C. É uma linguagem "enorme" e muito mais expressiva.

4 horas atrás, aksjnnuhbaueh cjas disse:
string x = "ofstream";
ofstream ofs("x.txt");

 

Está errado e por isso "não deu certo"...

 

a string é x então deve usar 

 

	ofstream (x);

 

Ou mesmo 
 

	ofstream{x};

 

ou

 

    ofstream arquivo{"nome.txt"};

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfneto    desculpe  ,  esses dois códigos não estão funcionando bem aqui no codeblocks ,   talvez precise fazer algumas configurações nesse IDE , para compilar  nesse formato ,  e não sei fazer isso  ,   e outros IDE  como visual studio são mais difícil  de usar  

e mostra esse erro

2039793988_erroofstream3.jpg.2a9db39e100b155917dc2f6728346c3a.jpg

 

nesse primeiro código 

 

1279720871_erroofstream2.thumb.jpg.d39ff05edce598f2a2dd33b1932e3566.jpg

 

e nesse seguinte 

 

395394287_erroofstream.thumb.jpg.1511807c490d9ceb2a7784727cc31b48.jpg

Link para o comentário
Compartilhar em outros sites

2 horas atrás, devair1010 disse:

desculpe  ,  esses dois códigos não estão funcionando bem aqui no codeblocks ,   talvez precise fazer algumas configurações nesse IDE , para compilar  nesse formato ,  e não sei fazer isso  ,   e outros IDE  como visual studio são mais difícil  de usar

 

Você leu o manual onde eu te mostrei, @devair1010?

 

Code::Blocks e Dev C++ são escolhas ruins. Visual Studio não é mais difícil de usar. Onde estaria a dificuldade? O editor é bem bom. Para compilar control F7, para rodar control F5 para o debug F5. Para sair Arquivo|sair... Não é muito diferente desse Code::Blocks

 

Direto do manual de onde eu disse, e fazendo o normal de se fazer que é ler o manual na página em que eu mostrei:

 

image.png.1e99fbc6dd066553d764686b2c076b92.png

No primeiro exemplo está bem claro que o compilar relclama onde nome é string.

 

image.png.8992e3dbabe3bac05db85e4bf32aaafb.png

Se olhar na lista acima vai ver que isso funciona a partir de C++11 (3). Se fosse por exemplo uma referência a FsPath precisaria de C++17 ao menos (5).

 

A primeira delaração  funcionou usando const char* certo (1)?

 

image.png.a33d5f657a122e0ff7d4a914bef4d7f3.png Pois é.

 

Não há razão para usar usa versão antiga da linguagem, uma com 24 anos. Deve imaginar que as empresas e escolas estejam estar usando algo mais moderno. A linguagem evoluiu e usar C++98 ou C89 é algo que não dá pra entender, nem nas escolas nem no Code::Blocks. 

 

Num emprego imagino que ninguém use Code::Blocks, Dev C++ ou essas versões de C ou C++ a menos de uma situação muito particular.  E numa empresa é provável que se encontre Visual Studio, VS Code, NetBeans, Eclipse, CLion...  Ou um sistema de Build como CMake e algo como Atom ou Sublime Text.

 

 

 

Use --std= e uma versão mais realista das linguagens. C++23 sai no ano que vem por exemplo.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...