Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Celestino Alona

C# Manipulação de arquivos txt

Recommended Posts

Bom dia, estava fazendo meu estudo de c/c++ e me deparei com um problema na hora de adicionar informações à um arquivo.txt que eu criei. Eu estou tentando fazer um código simples em que o usuário digita seu nome, o mesmo recebe algumas alterações, e depois esse nome é adicionado ao arquivo (adicionado, sem apagar o que já está). Porém, embora o programa rode, não acontece o que deveria.

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<locale.h>
#include<ctype.h>

using namespace std;

main()
{
	setlocale(LC_ALL,"portuguese");
	
	char word[300], copy[300];
	int i=0;
	
	FILE *file1 = fopen("Arquivo 2.txt", "a");
	
	
	cout << "Insira seu nome : ";
	gets(word);
	
	while(word[i] != '\0')
	{
		if(islower(word[0]))
		{
			word[0] = toupper(word[0]);
		}
		i++;
		if(i != 0)
		{
			word[i] = tolower(word[i]);

		}
	}
	
	cout << "\n\nSeu nome é : " << word << "\n\n";
	
	while(fgets(copy, 300, file1) != '\0')
	{
		fputs(word, file1);
	}
	
	
	
	return 0;
}

 

 

Editado por Celestino Alona

Compartilhar este post


Link para o post
Compartilhar em outros sites
36 minutos atrás, Celestino Alona disse:

FILE * file1 = fopen ("Arquivo 2.txt", "a");

 

Nesse momento abriu-se o arquivo-texto no modo append: Os dados já serão gravados no fim do arquivo. Basta agora usar o comando de gravação que, suponho:

 

36 minutos atrás, Celestino Alona disse:

	while(fgets(copy, 300, file1) != '\0')
	{
		fputs(word, file1);
	}

 

Você ainda pode testar se foi gravado pelo retorna da função fputs: Errado estão o while e o fgets

 

cout << "\n\nSeu nome é : " << word << "\n\n"; 
if (0  <  fputs (word, file1)){
      cout << "Arquivo recebeu nome!\n\n";
} else {
      cout << "Arquivo não recebeu nome!\n\n";
}
Editado por AnsiC
Correção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem vários problemas...

 

  1. Seu código está em C++ não em C# como indica o título do seu tópico.
  2. Está misturando bibliotecas do C (<stdio.h>, <stdlib.h>, <locale.h>, <ctype.h>)  com bibliotecas do C++ (<iostream>), quando programa em C++ use as bibliotecas do C++ (se vai usar bibliotecas do C++ que contém funções do C use <cstdio>, <cstdlib>, <clocale>, <cctype>, etc).
    Mas se vai preferir usar os recursos do C poderia programar em direto em C, ao invés de C++.
  3. O arquivo é aberto mas não é fechado com fclose(), então nada é escrito de fato no arquivo.
  4. Está usando funções do C quando existem recursos do próprio C++ para fazer a mesma coisa, e de maneira mais apropriada para o C++.

    Por exemplo:

 

  • Usou FILE * e fopen(), fgets() e fputs(), mas no C++ existe fstream e getline();
  • Usou gets() que jamais deve ser usado, mesmo no C, por ser uma função obsoleta que foi abandonada por não ser segura, mas poderia usar std::cin no C++.
  • Usou vetor de char mas poderia usar string no C++.
     

 

Veja o código usando os recursos do C++:

 

#include <iostream>
#include <fstream>
#include <clocale>
#include <string>
#include <cctype>

using namespace std;

int main()
{
    setlocale(LC_ALL,"portuguese");
    
    int i = 0;
    string word;
    
    fstream file1;
    file1.open("Arquivo2.txt", fstream::in | fstream::out | fstream::app);
    
    cout << "Insira seu nome : ";
    getline(cin, word);
    
    while(word[i] != '\0')
    {
        if(islower(word[0]))
        {
            word[0] = toupper(word[0]);
        }
        i++;
        if(i != 0)
        {
            word[i] = tolower(word[i]);
        }
    }
    
    cout << "\n\nSeu nome e' : " << word << "\n\n";
    
    file1 << word << "\n";
    
    file1.close();
    
    return 0;
}

 

Editado por isrnick
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×