Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Manipulação arquivo

Tenho um arquivo txt no qual abri uma matriz com caracteres. Inicialmente r fica distante de p essa é minha posição inicial. Na posição final o r fica no lugar do p sendo assim o p deixa de existir . Ao fazer isso tenho que alterar meu arquivo como fazer isso?

char **m; 
int l,c;

struct no {
char **m; 
int l,c;
};


using namespace std;

int mapa (){
     // declaro variavel file hadle para um txt
 ifstream txtFile;

 // abrindo o arquivo txt
 txtFile.open ("maze50x50.txt");


 // le o tamonho da matriz

 txtFile >> l >> c ;


 // aloco memoria 

m = (char **) malloc(l * sizeof(int*));//char


 for ( int nl = 0 ; nl<l; nl ++)
 {
 m[nl] = (char *) malloc(c * sizeof(int));
 }



  // le os valores do arquivo e preenche

 for (int i=0;i<l;i++)
         {
            for(int j=0;j<c;j++)
            {
            txtFile >> m[i][j];
            }
         }



//   imprime o valor da matriz na tela 

cout << " A matriz lida do arquivo tem tamanho: " << l << " x " << c;
cout << " Conteudo da matriz no arquivo: " << endl;

for(int i=0;i<l;i++)
         {
            for (int j=0;j<c;j++)
            {
            cout << m[i][j] << "";
            }

            cout  << endl;
         }

cout << endl <<endl;
}


int posinicial(){

 for(int i=0;i<l;i++)
         {
            for (int j=0;j<c;j++){

                if (m[i][j] == 'r')
                {
                    printf ("\n Posicao Robo [%i][%i] ", i, j);
                       printf (" \n");
                }
            }
        }

             for(int i=0;i<l;i++)
         {
            for (int j=0;j<c;j++){

                if (m[i][j] == 'p')
                {

                       printf ("\n Posicao final [%i][%i] ", i, j);
                }
            }
        }
}


int posicaofinal (){



cout << " A matriz lida do arquivo tem tamanho: " << l << " x " << c;
cout << " Conteudo da matriz no arquivo: " << endl;

for(int i=0;i<l;i++)
         {
            for (int j=0;j<c;j++)
            {
            cout << m[i][j] << "";
            }

            cout  << endl;
         }

cout << endl <<endl;


}    







int main(void)
{

mapa();
posinicial();
posicaofinal();



}
1 resposta
solução!

Oi Nicolle! Para escrever em um arquivo, você deve abrir o arquivo no modo w e usar a função fprintf(), lembrabdo de fechar o arquivo depois de escrever tudo o que quer. Segue um exemplo com impressão de texto, caracteres, inteiros e decimais!

#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *arquivo = fopen("arquivo.txt", "w");
  if (arquivo == NULL) {
      printf("Erro abrindo arquivo!\n");
      exit(1);
  }

  /* Imprimindo texto de três modos */
  char *texto = "Algum texto aleatório\n";
  fprintf(arquivo, texto);
  fprintf(arquivo, "Outro texto aleatório\n");
  fprintf(arquivo, "Outro texto com %s utilizando formato\n", "bananas");

  /* Imprimindo inteiros e decimais */
  int i = 1234;
  float pi = 3.1415927;
  fprintf(arquivo, "Inteiros: %d, Decimais: %f\n", i, pi);
  fprintf(arquivo, "%10d\n", i);
  fprintf(arquivo, "%10.3f\n", pi);

  /* Imprimindo caracteres */
  char c = 'A';
  fprintf(arquivo, "Caracteres: %c\n", c);
  fprintf(arquivo, "%c\n", 'B');

  /* Imprimindo sem \n */
  fprintf(arquivo, "Quero");
  fprintf(arquivo, "%c", 'C');
  fprintf(arquivo, "%c", 'A');
  fprintf(arquivo, "%c", 'F');
  fprintf(arquivo, "%c", 'E');
  fprintf(arquivo, "\n");

  fclose(arquivo);
  return(0);
}

A saída desse programa é a seguinte:

Algum texto aleatório
Outro texto aleatório
Outro texto com bananas utilizando formato
Inteiros: 1234, Decimais: 3.141593
      1234
     3.142
Caracteres: A
B
QueroCAFE

Espero ter ajudado!