Sahad Postado Março 3, 2010 Denunciar Share Postado Março 3, 2010 Galera to aprendendo c++ ainda, to com uma duvida na parte de criar um arquivo.txt para gravar e ler informações a partir dele, pois quero fazer um programa, mas quero que quando abra o programa novamente, as informações passadas não sejam perdidas.Obrigado :rolleyes: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 3, 2010 Denunciar Share Postado Março 3, 2010 de uma olhada nas funcoes fopen(), fprintf() e fscanf():http://www.cplusplus.com/reference/clibrary/cstdio/fopen/http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/algumas funcoes q aparecem no pe dessas paginas ai tb podem ajudar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 3, 2010 Autor Denunciar Share Postado Março 3, 2010 de uma olhada nas funcoes fopen(), fprintf() e fscanf():http://www.cplusplus.com/reference/clibrary/cstdio/fopen/http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/algumas funcoes q aparecem no pe dessas paginas ai tb podem ajudar.Ok, deu pra ter uma ideia de como usar, aproveitando que voce mencionou, qual a diferença de mandar um "cout<<" e um "printf" ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 3, 2010 Denunciar Share Postado Março 3, 2010 o printf() era a funcao q existia em c pra escrever na tela, e ai quando saiu o c++, veio o cout, q é mais facil de usar.se você trabalha com c++, acho q seria recomendavel usar o sempre cout, já q o printf() é uma funcao mais antiga.entretanto, li por ai q dependendo do caso o printf pode ser mais recomendado, mas se você ta iniciando, é melhor não se preocupar com isso por enquanto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 3, 2010 Autor Denunciar Share Postado Março 3, 2010 Então é impressão minha ou o fopen é do C tambem? Existiria um comando desse para o C++ nesse caso? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 3, 2010 Denunciar Share Postado Março 3, 2010 é, tem sim: http://www.cplusplus.com/doc/tutorial/files/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 3, 2010 Autor Denunciar Share Postado Março 3, 2010 Tava tentando aqui com o seguinte codigo:#include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile ("example.txt"); if (myfile.is_open()) { myfile << "This is a line.\n"; myfile << "This is another line.\n"; myfile.close(); } else cout << "Unable to open file"; return 0; }Mas está dando erro na linha: ofstream myfile ("example.txt"); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 3, 2010 Denunciar Share Postado Março 3, 2010 aqui esse codigo ta compilando.qual a mensagem do erro?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 3, 2010 Autor Denunciar Share Postado Março 3, 2010 Compilou agora, erro meu, eu tava colocando pra compilar e o destino do executavel ser numa pasta "Nova Pasta" dai tirei o espaço entre nova e pasta e deu certo.Mas to com uma duvida ainda sobre isso de arquivo, tudo bem os comandos de ler e gravar to conseguindo, o programa que to tentando fazer é so pra organizar umas coisas, como por exemplo tiver uns produtos e o codigo do produto e a quantidade disponivel e uma opção pra modificar e adicionar produto, dai queria que gravasse no arquivo para quando quiser ler a partir do programa aparecer mais ou menos assim:Produto Codigo QuantidadeMas não sei como fazer essa parte pra salvar e ler do arquivo, to parado no IF. Vo colocar o codigo abaixo pra voce ter uma ideia de onde parei, é um programa simples so pra treinar mesmo mas so to vendo c++ a pouco tempo.#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int resp; while (resp != 0) { cout<<"*************************************************"<<endl; cout<<"* PROGRAMA TESTE PRODUTOS *"<<endl; cout<<"*************************************************"<<endl<<endl; cout<<"Escolha uma das opcoes:"<<endl<<endl; cout<<"1 - Listar produtos"<<endl; cout<<"2 - Adicionar um produto"<<endl; cout<<"3 - Editar um produto"<<endl; cout<<"0 - Sair"<<endl<<endl; cin>>resp; if (resp == 1) { } } system("PAUSE"); return EXIT_SUCCESS;)*/ } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 sahad, olha o link q eu passei. esse codigo aqui tem tudo o q você precisa pra ler o arquivo:// reading a text file#include <iostream>#include <fstream>#include <string>using namespace std;int main () { string line; ifstream myfile ("example.txt"); if (myfile.is_open()) { while (! myfile.eof() ) { getline (myfile,line); cout << line << endl; } myfile.close(); } else cout << "Unable to open file"; return 0;}[/code] enquanto esse outro tem tudo o q você precisa pra escrever nele: [code]// writing on a text file#include <iostream>#include <fstream>using namespace std;int main () { ofstream myfile ("example.txt"); if (myfile.is_open()) { myfile << "This is a line.\n"; myfile << "This is another line.\n"; myfile.close(); } else cout << "Unable to open file"; return 0;}em q parte disso tudo exatamente você esta tendo dificuldade??você ta conseguindo entender esses exemplos?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 (editado) Entendi sim o funcionamento, so que tem 1 problema, nesse segundo eu gostaria de pedir para o usuario no caso digitar o que ele quer que seja adicionado no arquivo, do jeito que está ai o proprio programa irá colocar essas duas linhas no .txt.Estava vendo em algumas apostilas outras formas e achei uma, so que está dando erro na seguinte linha:O "Case 2" e "Case 3" ainda não fiz.#include <cstdlib> #include <iostream> #include <fstream> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { int resp; inicio: system("cls"); cout<<"*************************************************"<<endl; cout<<"* ORGANIZADOR DE PRODUTOS *"<<endl; cout<<"*************************************************"<<endl<<endl; cout<<"Escolha uma das opcoes:"<<endl<<endl; cout<<"1 - Listar produtos"<<endl; cout<<"2 - Adicionar um produto"<<endl; cout<<"3 - Editar um produto"<<endl; cout<<"0 - Sair"<<endl<<endl; switch(resp) { case 0: exit(0); break; case 1: cout<<"\n\nLista de produtos"<<endl; fstream produtos; produtos.open ("series.txt", ios::in) produtos.close(); // Ta dando erro nessa linha! goto inicio; break; case 2: cout<<"\n\nAdicionar um produto"<<endl; getch(); goto inicio; break; case 3: cout<<"\n\nEditar um produto"<<endl; getch(); goto inicio; break; system("PAUSE"); return EXIT_SUCCESS;)*/ } Editado Março 4, 2010 por Sahad Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 (editado) então, é so você imprimir a variavel onde ele digitou dentro do arquivo da mesma forma q o texto esta sendo impresso;aqui ta um exemplo:#include <iostream>#include <fstream>using namespace std;int main () { ofstream myfile ("example.txt"); if (myfile.is_open()) { char c[30]; cin >> c; myfile << c; //Aqui copia o texto q ele digitou pra dentro do arquivo. myfile.close(); } else cout << "Unable to open file"; return 0;}[/code]EDITADO:e a mensagem de erro deve ser porque faltou um ponto e virgula na linha de cima. Editado Março 4, 2010 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 Fiz o teste, até certo ponto, compilou OK so que quando vou rodar ele abre e fexa o programa na mesma hora.#include <cstdlib> #include <iostream> #include <fstream> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { int resp; inicio: system("cls"); cout<<"*************************************************"<<endl; cout<<"* ORGANIZADOR DE PRODUTOS *"<<endl; cout<<"*************************************************"<<endl<<endl; cout<<"Escolha uma das opcoes:"<<endl<<endl; cout<<"1 - Listar produtos"<<endl; cout<<"2 - Adicionar um produto"<<endl; cout<<"3 - Editar um produto"<<endl; cout<<"0 - Sair"<<endl<<endl; switch(resp) { case 0: exit(0); break; case 2: cout<<"\n\nLista de produtos"<<endl; ofstream myfile ("produtos.txt"); if (myfile.is_open()) { char c[30]; cin >> c; myfile << c; myfile.close(); } else cout << "Unable to open file"; goto inicio; break; system("PAUSE"); return EXIT_SUCCESS; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 você devia ler o resp antes do switch, não??com cin ou scanf(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 Sim faltava isso, erro meu, pronto consegui está gravando no arquivo, mas se eu gravo tipo "produto" dai fecho o programa, abro denovo e gravo "produto2" dai ele apaga o "produto" e coloca "produto2". Ai está declarado um char, tentei colocar string pois quero colocar mais dados assim como numeros.Aí está so o case como ficou:case 2: cout<<endl<<"Adicionar um produto"<<endl <<"Digite como no exemplo: Produto 5512 15"<<endl; ofstream myfile ("data.txt"); if (myfile.is_open()) { char pData[40]; cin >> pData; myfile << pData; myfile.close(); } else cout << "Unable to open file"; goto inicio; break; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 tente abrir assim:ofstream myfile ("data.txt", ios::out | ios::app); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 Aí está o codigo e os erros que ocorreram quando coloquei:ofstream myfile ("data.txt", ios::out | ios::app); Codigo Inteiro: #include <cstdlib> #include <iostream> #include <fstream> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { int resp; inicio: system("cls"); cout<<"*************************************************"<<endl; cout<<"* ORGANIZADOR DE PRODUTOS *"<<endl; cout<<"*************************************************"<<endl<<endl; cout<<"1 - Listar produtos"<<endl; cout<<"2 - Adicionar um produto"<<endl; cout<<"3 - Editar um produto"<<endl; cout<<"0 - Sair"<<endl<<endl; cout<<"Escolha uma das opcoes: "; cin>>resp; switch(resp) { case 0: exit(0); break; case 1: cout << "Lista de produtos" << endl << endl; ofstream myfile ("data.txt", ios::out | ios::app); // LINHA 31 goto inicio; break; case 2: // LINHA 35 cout << endl << "Adicionar um produto" << endl <<"Digite como no exemplo: Produto 5512 15"<<endl; ofstream myfile ("data.txt"); // LINHA 38 if (myfile.is_open()) { char pData[40]; cin >> pData; myfile << pData; myfile.close(); } else cout << "Unable to open file"; goto inicio; break; system("PAUSE"); return EXIT_SUCCESS; } }Erros: C:\Dev-Cpp\projeto_series.cpp In function `int main(int, char**)': 35 C:\Dev-Cpp\projeto_series.cpp jump to case label 31 C:\Dev-Cpp\projeto_series.cpp crosses initialization of `std::ofstream myfile' 38 C:\Dev-Cpp\projeto_series.cpp redeclaration of `std::ofstream myfile' 31 C:\Dev-Cpp\projeto_series.cpp `std::ofstream myfile' previously declared here 35 C:\Dev-Cpp\projeto_series.cpp [Warning] destructor needed for `myfile' 35 C:\Dev-Cpp\projeto_series.cpp [Warning] where case label appears here 35 C:\Dev-Cpp\projeto_series.cpp [Warning] (enclose actions of previous case statements requiring destructors in their own scope.) C:\Dev-Cpp\Makefile.win [build Error] [../Users/Raiff/Desktop/projeto_series/projeto_series.o] Error 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 (editado) isso ai é porque você ta declarando o myfile duas vezes. uma vez no case 1 e outra vez no case 2.você pode adicionar umas chaves pra separar a declaracao dos dois objetos, assim você restringe o alcance deles e não vai ter conflito. tipo assim:case 1:{ cout << "Lista de produtos" << endl << endl; ofstream myfile ("data.txt", ios::out | ios::app); // LINHA 31 goto inicio;}break;case 2: // LINHA 35{ cout << endl << "Adicionar um produto" << endl <<"Digite como no exemplo: Produto 5512 15"<<endl; ofstream myfile ("data.txt"); // LINHA 38 if (myfile.is_open()) { char pData[40]; cin >> pData; myfile << pData; myfile.close(); } else cout << "Unable to open file"; goto inicio;}break;[/code]a e tb o ios::out | ios::app de q eu falei era pra por la embaxo quando você abre o arquivo no case 2. esses dois flags significam q você ta abrindo o arquivo pra output e append (pra escrever dentro dele, q é exatamente o q faz o case 2). e se você fizer isso no case 1, você tb não deve conseguir ler os dados. Editado Março 4, 2010 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 Agora compilou sem erros, mas esse listar não esta saindo bem, eu abro o programa, coloco a opção 2, adiciono um nome, volto pro menu, escolho a opção 1( listar) dai ele tava listando e voltando pro menu na mesmo hora, coloquei um getch(); dai ele n volta pro menu ate apertar 1 tecla, mas não ta listando. Fica assim a tela abaixo das opções:Lista de produtos _O "_" coloquei simbolizando ele piscando. Ou seja não está aparecendo o que foi digitado e gravado no arquivo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 4, 2010 Denunciar Share Postado Março 4, 2010 mas como ta o seu codigo pra listar os produtos??esse aqui não vai listar nd mesmo:case 1: cout << "Lista de produtos" << endl << endl; ofstream myfile ("data.txt", ios::out | ios::app); // LINHA 31 goto inicio;[/code]olha la o codigo de exemplo, você devia dar usar o getline() pra pegar as linhas e depois um cout pra escrever na tela.a e no caso, pra ler o arquivo, não é pra ser ofstream e sim ifstream. ofstream é so pra escrever no arquivo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 4, 2010 Autor Denunciar Share Postado Março 4, 2010 Não teria outra forma de salvar os dados sem ser os colocando em um arquivo .txt?Pois é mais complicado que apenas escrever 1 linha e ler, seria varias linhas escritas com nomes e numeros, daí teria que ler todas as linhas para colocar na tela, e quando fosse editar, qual seria a ideia? tipo, supor que estaria assim:PRODUTO CODIGO QUANTIDADEprodutoxyw 14215325 10 produtoy 09352 25 produtozy 1421 05Dai como faria pra editar o codigo e/ou a quantidade? Qual seria a outra alternativa para salvar essas informações? :wacko: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 5, 2010 Denunciar Share Postado Março 5, 2010 Não teria outra forma de salvar os dados sem ser os colocando em um arquivo .txt?teria, você pode usar banco de dados. mas qual seria o objetivo?? você ta tentando so estudar c++ ou ta pretendendo criar um sistema mesmo??Dai como faria pra editar o codigo e/ou a quantidade? Qual seria a outra alternativa para salvar essas informações? :wacko:o q você teria q fazer seria procurar o registro dentro do txt baseado no codigo, e ai, no meu modo de ver, você teria q reescrever o txt inteiro, copiando todas as linhas e, na hora de escrever essa linha q ele editou, em vez de copiar a q esta no txt você grava os dados q ele digitou. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sahad Postado Março 5, 2010 Autor Denunciar Share Postado Março 5, 2010 É mais pra estudar e tambem pra fazer um programa que seria util ate aqui, não de produtos, mas a mesma ideia. Vou continuar vendo as apostilas aqui, e para esse caso vou pequisar pois não sei nada ainda sobre banco de dados. Valeu pela ajuda :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wnove Postado Abril 10, 2018 Denunciar Share Postado Abril 10, 2018 Em 03/03/2010 at 01:04, Sahad disse: Galera to aprendendo c++ ainda, to com uma duvida na parte de criar um arquivo.txt para gravar e ler informações a partir dele, pois quero fazer um programa, mas quero que quando abra o programa novamente, as informações passadas não sejam perdidas. Obrigado :rolleyes: Fiz esse código para aula de C++ onde faço que você disse que precisa. espero que ajude a expandir suas possibilidades. #include<iostream> #include<fstream> #include<cstdlib> #include<cstdio> #include<conio.h> #define PATH_ARQUIVO "C:\\Aula_Arquivos\\produtos.txt" using namespace std; struct Produto { int Codigo; char Nome[50]; float preço; int Ativo; }; int recuperarOpcao(); void montarMenu(); void cadastrarProduto(); void listarTodos(); void editaProduto(); void contarProdutos(); void excluir(); int main() { int op; do { montarMenu(); op = recuperarOpcao(); switch(op) { case 1: cadastrarProduto(); break; case 2: listarTodos(); break; case 3: editaProduto(); break; case 4: excluir(); break; case 5: contarProdutos(); break; case 6: return 1; break; default: cout << "Opcao invalida."; break; } cout << "\n\nPressione ESC para sair."; } while(getch() != 27); return 1; } int recuperarOpcao() { int opcao; cout << "Digite sua opcao: "; cin >> opcao; cin.ignore(); return opcao; } void montarMenu() { system("CLS"); cout << "..:: Cadastro de Produtos ::.." << "\n\n1 - Cadastrar" << "\n2 - Listar todos" << "\n3 - Editar" << "\n4 - Excluir" << "\n5 - Contar Produtos" << "\n6 - Sair\n\n"; } void contarProdutos() { fstream arq; arq.open(PATH_ARQUIVO, ios::in | ios::app | ios::binary); arq.seekg(0, ios::end); double tamanhoArquivo; tamanhoArquivo = arq.tellg(); int qtdProdutos; qtdProdutos = tamanhoArquivo / sizeof(Produto); system("CLS"); cout << "..:: Contagem de Produtos ::..\n\n"; cout << "Nosso arquivo contem " << qtdProdutos << " produtos."; arq.close(); } void listarTodos() { system("CLS"); cout << "..:: Produtos Cadastrados ::..\n"; fstream arq; arq.open(PATH_ARQUIVO, ios::in | ios::app | ios::binary); arq.seekg(0, ios::beg); Produto prod; while(arq.read((char*)&prod, sizeof(Produto))) { if(prod.Ativo == 1) { cout << "\nCodigo: " << prod.Codigo; cout << "\nNome: " << prod.Nome; cout << "\nPreco: " << prod.preço << "\n"; } } arq.close(); } void cadastrarProduto() { Produto prod; system("CLS"); cout << "..:: Cadastrar um Produto ::.."; cout << "\n\nDigite o codigo: "; cin >> prod.Codigo; cin.ignore(); cout << "Digite o nome: "; gets(prod.Nome); cout << "Digite o preço: "; cin >> prod.preço; cin.ignore(); prod.Ativo = 1; fstream arq; arq.open(PATH_ARQUIVO, ios::out | ios::app | ios::binary); arq.seekp(0, ios::end); arq.write((char*)&prod, sizeof(Produto)); arq.flush(); arq.close(); } void editaProduto() // { system("CLS"); cout << "..:: Editar um Produto ::..\n\n"; // int codEdit, posRegistro = -1, contador = 0; Produto prod; cout << "Digite o codigo a ser editado: "; cin >> codEdit; cin.ignore(); ifstream fin(PATH_ARQUIVO, ios::binary); fin.seekg(0, ios::beg); while(fin.read((char*)&prod, sizeof(Produto))) { if(prod.Codigo == codEdit && prod.Ativo == 1) { cout << "\nProduto a ser editado\n"; cout << "\nCodigo: " << prod.Codigo; //cin >> (prod.Codigo = -1); cout << "\nNome: " << prod.Nome << "\n"; cin >> prod.Nome; cin.ignore(); cout << "\nPreco: " << prod.preço << "\n"; cin >> prod.preço; cin.ignore(); posRegistro = contador; break; } contador++; } fin.close(); if(posRegistro > -1) { char confirma; cout << "\nConfirma a edicao do iten? (s/n): "; cin >> confirma; cin.ignore(); if(confirma == 'S' || confirma == 's') { fstream fout(PATH_ARQUIVO, ios::in | ios::out | ios::binary); fout.seekp(posRegistro * sizeof(Produto), ios::beg); fout.write((char*)&prod, sizeof(Produto)); fout.flush(); fout.close(); } } else { cout << "Produto não localizado."; } // } void excluir() { system("CLS"); cout << "..:: Excluir Produtos ::..\n"; int codExcluir, posRegistro = -1, contador = 0; Produto prod; cout << "\nDigite o codigo a ser excluido: "; cin >> codExcluir; cin.ignore(); ifstream fin(PATH_ARQUIVO, ios::binary); fin.seekg(0, ios::beg); while(fin.read((char*)&prod, sizeof(Produto))) { if(prod.Codigo == codExcluir && prod.Ativo == 1) { cout << "\nProduto a ser excluido\n"; cout << "\nCodigo: " << prod.Codigo; cout << "\nNome: " << prod.Nome; cout << "\nPreco: " << prod.preço << "\n"; posRegistro = contador; break; } contador++; } fin.close(); if(posRegistro > -1) { char confirma; cout << "\nDeseja realmente excluir (s/n): "; cin >> confirma; cin.ignore(); if(confirma == 'S' || confirma == 's') { fstream fout(PATH_ARQUIVO, ios::in | ios::out | ios::binary); prod.Ativo = 0; fout.seekp(posRegistro * sizeof(Produto), ios::beg); fout.write((char*)&prod, sizeof(Produto)); fout.flush(); fout.close(); } } else { cout << "Produto não localizado."; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Sahad
Galera to aprendendo c++ ainda, to com uma duvida na parte de criar um arquivo.txt para gravar e ler informações a partir dele, pois quero fazer um programa, mas quero que quando abra o programa novamente, as informações passadas não sejam perdidas.
Obrigado :rolleyes:
Link para o comentário
Compartilhar em outros sites
23 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.