Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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

 

Postado

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
Postado

@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
Postado

@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
Postado
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
Postado

@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

Postado
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

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...