Ir ao conteúdo
  • Cadastre-se

C salvar e ler arquivos


Talyson Maia

Posts recomendados

Olá, eu fiz um sistema de cadastro para o time de futebol da minha faculdade. No entanto, eu não estou conseguindo salvar os dados cadastrados em texto no meu computador. Alguém poderia me instruir a salvar arquivos e também ler esses arquivos?
 

#include <stdio.h>

#include <stdlib.h> //possui funções envolvendo alocação de memória, controle de processos, conversões e outras

#include <string.h>  //Esta biblioteca contém funções que manipulam strings.

typedef struct {
  char nome[30]; //vetor de caractere com 30 posições
  int matricula;
  int idade;
  float peso;
  float altura;
  char posicao[100]; //vetor de caractere com 100 posições
  //int operacao;
}
play; //nome da estrutura. Essa estrutura guarda as minhas informações sobre o aluno que deseja se inscrever.

typedef struct {
  char coment[100];
  int size;
  char nome[30];
  int rg;
  int number;
  char ender[100];
  char plano[30];

}
clube;

clube socio_clube() {
  clube b;
  int op = 0;
  printf("\nOla, bem vindo ao cadastro para se tornar socio de um clube.\n");
  printf("\nPLANOS DISPONIVEIS: \n");
  printf("Ouro -- 20 reais/mes\n");
  printf("Prata -- 15 reais/mes\n");
  printf("Bronze -- 10 reais/mes\n");

  //sleep(1);
  printf("\nBem vindo ao cadastro de socios. Coloque seus dados e em breve entraremos em contato para falarmos sobre o pagamento\n");
  printf("Digite o seu nome: \n");
  scanf(" %[^\n]s", b.nome);
  printf("Digite o seu RG: \n");
  scanf("%d", & b.rg);
  printf("Digite o seu numero para contato: \n");
  scanf("%d", & b.number);
  printf("Digite o seu endereco: \n");
  scanf(" %[^\n]s", b.ender);
  printf("Digite o nome do plano que voce deseja: \n");
  scanf(" %[^\n]s", b.plano);
  //sleep(1);
  system("cls");

  printf("Obrigado. voce retornara ao menu principal");
  //sleep(1);
  system("cls");
}

clube * insere_clube(clube * t, int * m, clube nv) { //t muda v -- m muda n 
  t = (clube * ) realloc(t, ( * m + 1) * sizeof(clube)); ///altere o tamanho do vetor v para conter *n+1 elementos, pondo endereço em v. (A funcao modifica o tamanho da memoria previamente alocada apontada por *ptr para aquele especificado por num. O valor de num pode ser maior ou menor que o original) 
  if (t == 0) {
    printf("Ops! não estamos conseguindo inserir o aluno");
  }
  //colocamos o jogador novo na última posição do vetor (posicao *n)
  t[ * m] = nv;
  ( * m) ++;
  return t;
}
clube * remove_associado(clube * t, int * m, int rg) { //rg no lugar de matricula
  for (int j = 0; j < * m; j++) {
    if (t[j].rg == rg) { // 1 2 3 4 | 1 3 3 4 | 1 3 4 4 | 1 3 4 ////se a matrícula do i-ésimo elemento do vetor é igual à 'matrícula' passada como parâmetro
      //for(int j = i; j < *m - 1; j++) {
      t[j] = t[( * m) - 1]; ////copiando último elemento do vetor para a posição i
    }
    //estamos realocando o vetor para conter um elemento a menos, pondo endereço em v
    t = (clube * ) realloc(t, ( * m - 1) * sizeof(clube));
    //quando não for possivel realocar vai aparecer essa msg:
    if (t == 0 && ( * m) != 1) { //antigamente não dava certo porque removia o ultimo elemento e ficava com v = 0, aí ele entrava na condição
      printf("Ops! não foi possivel remover o associado");
      return 0;
    }
    ( * m) --;
    break;
  }
  printf("Removemos o associado. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("cls");

  //retornando o endereço de memória do vetor realocado
  return t;
}

void achar_socio(clube * t, int * m, int acharrg, int senha) {
  if (senha == 785) {
    printf("Ola colaborador, qual associado voce deseja ver? \n");
    scanf("%d", & acharrg);
    for (int j = 0; j < * m; j++) {
      if (t[j].rg == acharrg) {
        printf("\n%s\n%d\n%d\n%s\n%s\n", t[j].nome, t[j].rg, t[j].number, t[j].ender, t[j].plano);
      }
    }
  } else {
    printf("senha incorreta\n");
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);
}

void lista_socio(clube * t, int * m, int senha) {
  printf("\nSegue a lista de todos associados: \n");
  for (int j = 0; j < * m; j++) {
    printf("\n%s\n%d\n%d\n%s\n%s\n", t[j].nome, t[j].rg, t[j].number, t[j].ender, t[j].plano);
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);

}

play cadastra_play() {

  play a; //declarei uma variavel ''a'' do tipo(estrutura) play

  printf("Digite o seu nome: \n");
  scanf(" %[^\n]s", a.nome);
  printf("Digite sua matricula: \n");
  scanf("%d", & a.matricula);
  printf("Digite sua idade: \n");
  scanf("%d", & a.idade);
  printf("Digite seu peso: \n");
  scanf("%f", & a.peso);
  printf("Digite sua altura: \n");
  scanf("%f", & a.altura);
  printf("Digite a posicao que voce pretende jogar: \n");
  scanf(" %[^\n]s", a.posicao);
  system("cls"); //win ; ''clear'' linux
  printf("\n");
  printf("Obrigado pelo cadastro. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("cls");
  return a;
}
play * insere_play(play * v, int * n, play novo) { //ponteiro que aponta para estrutura do tipo play, outro para um tipo inteiro e uma variavel novo;
  v = (play * ) realloc(v, ( * n + 1) * sizeof(play)); ///altere o tamanho do vetor v para conter *n+1 elementos, pondo endereço em v. (A funcao modifica o tamanho da memoria previamente alocada apontada por *ptr para aquele especificado por num. O valor de num pode ser maior ou menor que o original) 
  if (v == 0) {
    printf("Ops! não estamos conseguindo inserir o aluno");
  }
  //colocamos o jogador novo na última posição do vetor (posicao *n)
  v[ * n] = novo;
  ( * n) ++;
  return v;
}

play * remove_play(play * v, int * n, int matricula) {
  for (int i = 0; i < * n; i++) {
    if (v[i].matricula == matricula) { // 1 2 3 4 | 1 3 3 4 | 1 3 4 4 | 1 3 4 ////se a matrícula do i-ésimo elemento do vetor é igual à 'matrícula' passada como parâmetro
      //for(int j = i; j < *n - 1; j++) {
      v[i] = v[( * n) - 1]; ////copiando último elemento do vetor para a posição i
    }
    //estamos realocando o vetor para conter um elemento a menos, pondo endereço em v
    v = (play * ) realloc(v, ( * n - 1) * sizeof(play));
    //quando não for possivel realocar vai aparecer essa msg:
    if (v == 0 && ( * n) != 1) { //antigamente não dava certo porque removia o ultimo elemento e ficava com v = 0, aí ele entrava na condição
      printf("Ops! não foi possivel remover alunos");
      return 0;
    }
    ( * n) --;
    break;
  }
  printf("Removemos o aluno. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("clear");

  //retornando o endereço de memória do vetor realocado
  return v;
}

void achar_play(play * v, int * n, int acharmat, int senha) {
  if (senha == 785) {
    printf("Ola colaborador, qual inscricao voce deseja conferir? Digite a matricula do inscrito: \n");
    scanf("%d", & acharmat);
    for (int i = 0; i < * n; i++) {
      if (v[i].matricula == acharmat) {
        printf("\n%s\n%d\n%d\n%.1f\n%.2f\n%s\n", v[i].nome, v[i].matricula, v[i].idade, v[i].peso, v[i].altura, v[i].posicao);
      }
    }
  } else {
    printf("senha incorreta\n");
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);
}

void lista_play(play * v, int * n, int senha) {
  printf("\nSegue a lista de alunos cadastrados por ordem de cadastro: \n");
  for (int i = 0; i < * n; i++) {
    printf("\n%s\n%d\n%d\n%.1f\n%.2f\n%s\n", v[i].nome, v[i].matricula, v[i].idade, v[i].peso, v[i].altura, v[i].posicao);
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);

}

int main() {
  int i, j, n = 0, m = 0, senha = 0;
  play * v = 0;
  clube * t = 0;
  int mat = 0, doc = 0;
  char oper = 0;
  //algumas dessas variaveis acima(como n, mat, oper) serão passadas por referências pra função
  do {
    printf("\t\t===SEJA BEM VINDO AO SISTEMA DO TORNEIO DE FUTEBOL DE QUIXADA===\n");
    printf("===MENU ATLETAS===                     ===MENU CLUBES===\n");
    printf("Escolha:\nA... Cadastrar Aluno            E... Se tornar socio do clube\n");
    printf("B... Remove Aluno               F... Remover socio\n");
    printf("C... Listar alunos              G... informações de um socio (restrito) \n");
    printf("D... Achar aluno                H... Listar o nome de todos os socios\n");
    printf("E... Sair do menu               S... sair do menu\n");
    printf("\n");
    printf("        \tESCOLHA A OPCAO DO MENU QUE voce DESEJA ENTRAR:\n");
    scanf("                %c", & oper);
    system("cls");
    switch (oper) {
    case 'A':
    case 'a':
      ;
      play novo = cadastra_play();
      v = insere_play(v, & n, novo);
      break;
    case 'B':
    case 'b':
      printf("Digite a matricula do aluno que voce deseja remover: ");
      scanf("%d", & mat);
      v = remove_play(v, & n, mat);
      break;
    case 'C':
    case 'c':
      lista_play(v, & n, senha);
      break;
    case 'D':
    case 'd':
      printf("\nAcesso restrito. Digite a senha: \n");
      scanf("%d", & senha);
      achar_play(v, & n, mat, senha);
      break;
    case 'E':
    case 'e':
      ;
      clube nv = socio_clube();
      t = insere_clube(t, & m, nv);
      break;
    case 'F':
    case 'f':
      scanf("%d", & doc);
      printf("Escreva seu rg para cancelar o seu socio");
      t = remove_associado(t, & m, doc);
      break;
    case 'G':
    case 'g':
      printf("\nAcesso restrito. Digite a senha: \n");
      scanf("%d", & senha);
      achar_socio(t, & m, doc, senha);
      break;
    case 'H':
    case 'h':
      lista_socio(t, & m, senha);
      break;
    case 'S':
      system("exit");
      break;
    default:
      printf("Opcao invalida. Tente novamente: \n");
      break;
    }
  } while (oper != 'S');

  free(v); //desaloca a porção de memória alocada

  return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@arfneto Eu não consegui entender....

Eu tentei assim, mas não foi:

Citação
#include <stdio.h>

#include <stdlib.h> //possui funções envolvendo alocação de memória, controle de processos, conversões e outras

#include <string.h>  //Esta biblioteca contém funções que manipulam strings.

typedef struct {
  char nome[30]; //vetor de caractere com 30 posições
  int matricula;
  int idade;
  float peso;
  float altura;
  char posicao[100]; //vetor de caractere com 100 posições
  //int operacao;
}
play; //nome da estrutura. Essa estrutura guarda as minhas informações sobre o aluno que deseja se inscrever.

typedef struct {
  char coment[100];
  int size;
  char nome[30];
  int rg;
  int number;
  char ender[100];
  char plano[30];

}
clube;

void plays_para_arquivo(play turma[], int n)
{
   FILE *f = fopen("plays.txt", "w"); 
   if(f == 0){
       printf("ERRO ao abrir o arquivo"); 
       return; 
   }
   for(int i = 0; i < n; i++)
       fprintf(f, "%s\n%d\n%d\n%.1f\n%.2f\n%s\n", turma[i].nome, turma[i].matricula, turma[i].idade, turma[i].peso, turma[i].altura, turma[i].posicao); 
        fclose(f);
}

void imprime_plays_arquivo()
{
   FILE *f = fopen("plays.txt", "r");
   if(f == 0){
       printf("ERRO ao abrir o arquivo"); 
       return; 
   }
   play c; 
   while (fscanf(f, "%[^\n]s\n%d\n%d\n%.1f\n%.2f\n%[^\n]s\n", c.nome, &c.matricula, &c.idade, &c.peso, &c.altura, c.posicao) == 6) {
      printf("%s\n%d\n%d\n%.1f\n%.2f\n%s\n", c.nome, c.matricula, c.idade, c.peso, c.altura, c.posicao); 
   }
   fclose(f); 
}
clube socio_clube() {
  clube b;
  int op = 0;
  printf("\nOla, bem vindo ao cadastro para se tornar socio de um clube.\n");
  printf("\nPLANOS DISPONIVEIS: \n");
  printf("Ouro -- 20 reais/mes\n");
  printf("Prata -- 15 reais/mes\n");
  printf("Bronze -- 10 reais/mes\n");

  //sleep(1);
  printf("\nBem vindo ao cadastro de socios. Coloque seus dados e em breve entraremos em contato para falarmos sobre o pagamento\n");
  printf("Digite o seu nome: \n");
  scanf(" %[^\n]s", b.nome);
  printf("Digite o seu RG: \n");
  scanf("%d", & b.rg);
  printf("Digite o seu numero para contato: \n");
  scanf("%d", & b.number);
  printf("Digite o seu endereco: \n");
  scanf(" %[^\n]s", b.ender);
  printf("Digite o nome do plano que voce deseja: \n");
  scanf(" %[^\n]s", b.plano);
  //sleep(1);
  system("cls");

  printf("Obrigado. voce retornara ao menu principal");
  //sleep(1);
  system("cls");
}

clube * insere_clube(clube * t, int * m, clube nv) { //t muda v -- m muda n 
  t = (clube * ) realloc(t, ( * m + 1) * sizeof(clube)); ///altere o tamanho do vetor v para conter *n+1 elementos, pondo endereço em v. (A funcao modifica o tamanho da memoria previamente alocada apontada por *ptr para aquele especificado por num. O valor de num pode ser maior ou menor que o original) 
  if (t == 0) {
    printf("Ops! não estamos conseguindo inserir o aluno");
  }
  //colocamos o jogador novo na última posição do vetor (posicao *n)
  t[ * m] = nv;
  ( * m) ++;
  return t;
}
clube * remove_associado(clube * t, int * m, int rg) { //rg no lugar de matricula
  for (int j = 0; j < * m; j++) {
    if (t[j].rg == rg) { // 1 2 3 4 | 1 3 3 4 | 1 3 4 4 | 1 3 4 ////se a matrícula do i-ésimo elemento do vetor é igual à 'matrícula' passada como parâmetro
      //for(int j = i; j < *m - 1; j++) {
      t[j] = t[( * m) - 1]; ////copiando último elemento do vetor para a posição i
    }
    //estamos realocando o vetor para conter um elemento a menos, pondo endereço em v
    t = (clube * ) realloc(t, ( * m - 1) * sizeof(clube));
    //quando não for possivel realocar vai aparecer essa msg:
    if (t == 0 && ( * m) != 1) { //antigamente não dava certo porque removia o ultimo elemento e ficava com v = 0, aí ele entrava na condição
      printf("Ops! não foi possivel remover o associado");
      return 0;
    }
    ( * m) --;
    break;
  }
  printf("Removemos o associado. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("cls");

  //retornando o endereço de memória do vetor realocado
  return t;
}

void achar_socio(clube * t, int * m, int acharrg, int senha) {
  if (senha == 785) {
    printf("Ola colaborador, qual associado voce deseja ver? \n");
    scanf("%d", & acharrg);
    for (int j = 0; j < * m; j++) {
      if (t[j].rg == acharrg) {
        printf("\n%s\n%d\n%d\n%s\n%s\n", t[j].nome, t[j].rg, t[j].number, t[j].ender, t[j].plano);
      }
    }
  } else {
    printf("senha incorreta\n");
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);
}

void lista_socio(clube * t, int * m, int senha) {
  printf("\nSegue a lista de todos associados: \n");
  for (int j = 0; j < * m; j++) {
    printf("\n%s\n%d\n%d\n%s\n%s\n", t[j].nome, t[j].rg, t[j].number, t[j].ender, t[j].plano);
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);

}

play cadastra_play() {

  play a; 
  printf("Digite o seu nome: \n");
  scanf(" %[^\n]s", a.nome);
  printf("Digite sua matricula: \n");
  scanf("%d", & a.matricula);
  printf("Digite sua idade: \n");
  scanf("%d", & a.idade);
  printf("Digite seu peso: \n");
  scanf("%f", & a.peso);
  printf("Digite sua altura: \n");
  scanf("%f", & a.altura);
  printf("Digite a posicao que voce pretende jogar: \n");
  scanf(" %[^\n]s", a.posicao);
  system("cls"); //win ; ''clear'' linux
  printf("\n");
  printf("Obrigado pelo cadastro. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("cls");
  return a;
}
play * insere_play(play * v, int * n, play novo) { //ponteiro que aponta para estrutura do tipo play, outro para um tipo inteiro e uma variavel novo;
  v = (play * ) realloc(v, ( * n + 1) * sizeof(play)); ///altere o tamanho do vetor v para conter *n+1 elementos, pondo endereço em v. (A funcao modifica o tamanho da memoria previamente alocada apontada por *ptr para aquele especificado por num. O valor de num pode ser maior ou menor que o original) 
  if (v == 0) {
    printf("Ops! não estamos conseguindo inserir o aluno");
  }
  //colocamos o jogador novo na última posição do vetor (posicao *n)
  v[ * n] = novo;
  ( * n) ++;
  return v;
}

play * remove_play(play * v, int * n, int matricula) {
  for (int i = 0; i < * n; i++) {
    if (v[i].matricula == matricula) { // 1 2 3 4 | 1 3 3 4 | 1 3 4 4 | 1 3 4 ////se a matrícula do i-ésimo elemento do vetor é igual à 'matrícula' passada como parâmetro
      //for(int j = i; j < *n - 1; j++) {
      v[i] = v[( * n) - 1]; ////copiando último elemento do vetor para a posição i
    }
    //estamos realocando o vetor para conter um elemento a menos, pondo endereço em v
    v = (play * ) realloc(v, ( * n - 1) * sizeof(play));
    //quando não for possivel realocar vai aparecer essa msg:
    if (v == 0 && ( * n) != 1) { //antigamente não dava certo porque removia o ultimo elemento e ficava com v = 0, aí ele entrava na condição
      printf("Ops! não foi possivel remover alunos");
      return 0;
    }
    ( * n) --;
    break;
  }
  printf("Removemos o aluno. Agora voce retornara ao menu principal.\n");
  //sleep(3);
  system("clear");

  //retornando o endereço de memória do vetor realocado
  return v;
}

void achar_play(play * v, int * n, int acharmat, int senha) {
  if (senha == 785) {
    printf("Ola colaborador, qual inscricao voce deseja conferir? Digite a matricula do inscrito: \n");
    scanf("%d", & acharmat);
    for (int i = 0; i < * n; i++) {
      if (v[i].matricula == acharmat) {
        printf("\n%s\n%d\n%d\n%.1f\n%.2f\n%s\n", v[i].nome, v[i].matricula, v[i].idade, v[i].peso, v[i].altura, v[i].posicao);
      }
    }
  } else {
    printf("senha incorreta\n");
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);
}

void lista_play(play * v, int * n, int senha) {

  printf("\nSegue a lista de alunos cadastrados por ordem de cadastro: \n");
  for (int i = 0; i < * n; i++) {
    printf("\n%s\n%d\n%d\n%.1f\n%.2f\n%s\n", v[i].nome, v[i].matricula, v[i].idade, v[i].peso, v[i].altura, v[i].posicao);
  }
  do {
    printf("Deseja retornar ao menu principal? Sim (1)\n");
    scanf("%d", & senha);
    if (senha == 1) {
      printf("Obrigado por conferir");
      //sleep(1);
      system("cls");
    }
  } while (senha != 1);

}

int main() {
  int i, j, n, m = 0, senha = 0;
  play * v = 0;
  clube * t = 0;
  int mat = 0, doc = 0;
  char oper = 0;
  play turma[n];
  //algumas dessas variaveis acima(como n, mat, oper) serão passadas por referências pra função
  do {
    printf("\t\t===SEJA BEM VINDO AO SISTEMA DO TORNEIO DE FUTEBOL DE QUIXADA===\n");
    printf("===MENU ATLETAS===                     ===MENU CLUBES===\n");
    printf("Escolha:\nA... Cadastrar Aluno            K... Se tornar socio do clube\n");
    printf("B... Remove Aluno               F... Remover socio\n");
    printf("C... Listar alunos              G... informações de um socio (restrito) \n");
    printf("D... Achar aluno                H... Listar o nome de todos os socios\n");
    printf("E... Sair do menu               S... sair do menu\n");
    printf("\n");
    printf("        \tESCOLHA A OPCAO DO MENU QUE voce DESEJA ENTRAR:\n");
    scanf("                %c", & oper);
    system("cls");
    switch (oper) {
    case 'A':
    case 'a':
      ;
      play novo = cadastra_play();
      v = insere_play(v, & n, novo);
      break;
    case 'B':
    case 'b':
      printf("Digite a matricula do aluno que voce deseja remover: ");
      scanf("%d", & mat);
      v = remove_play(v, & n, mat);
      break;
    case 'C':
    case 'c':
      lista_play(v, & n, senha);
      break;
    case 'D':
    case 'd':
      printf("\nAcesso restrito. Digite a senha: \n");
      scanf("%d", & senha);
      achar_play(v, & n, mat, senha);
      break;
    case 'K':
    case 'k':
      ;
      clube nv = socio_clube();
      t = insere_clube(t, & m, nv);
      break;
    case 'F':
    case 'f':
      scanf("%d", & doc);
      printf("Escreva seu rg para cancelar o seu socio");
      t = remove_associado(t, & m, doc);
      break;
    case 'G':
    case 'g':
      printf("\nAcesso restrito. Digite a senha: \n");
      scanf("%d", & senha);
      achar_socio(t, & m, doc, senha);
      break;
    case 'H':
    case 'h':
      lista_socio(t, & m, senha);
      break;
    case 'S':
      system("exit");
      break;
    default:
      printf("Opcao invalida. Tente novamente: \n");
      break;
    }
  } while (oper != 'S');
	plays_para_arquivo(turma, n);
	imprime_plays_arquivo();
  free(v); //desaloca a porção de memória alocada
  
  return 0;
}

 

 

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, Talyson Maia disse:

@arfneto Eu não consegui entender....

 

Como eu disse, o modo 2 é o mais simples. Lá tem o código, a explicação , o exemplo e a saída. 

 

O que você não entendeu? O que você fez?

Não escreva NUNCA um programa interativo se não está pronto ainda. Só vai perder muito tempo. Pra que precisa de um menu agora? Cada vez que vai testar o programa leva quanto tempo?

 

 

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!