Logo Hardware.com.br
luiza-silva
luiza-silva Zerinho Registrado
4 Mensagens 2 Curtidas

[Resolvido] Programa em C.

#1 Por luiza-silva 11/04/2024 - 01:10
include  <stdio.h>
// Segue arquivo da agenda2.c para rodar e relatar o teste

typedef struct {
      char nome[30+1];
      int    fone;
} Aluno;                //  novo tipo "Aluno" foi criado aqui

Aluno  alu[100];    // cria tabela "alu" na memória com 100 linhas
int  prox;            // indice da proxima linha livre na tabela "alu"

GravaDadosMemoria(){
          FILE      *arq;        // serve para referenciar o arquivo aberto no disco
          int        i;
          arq = fopen("dadosAgenda.txt", "w&quot;  // cria o arquivo para gravacao "w"
          if( arq == NULL ) {
                  printf("Erro: disco cheio!!!\n&quot;
                  return;            // cancela gravacao
          }

          for( i=0; i < prox; i++ ) {
                printf("Gravando [%s]...\n", alu[i].nome);
              fprintf( arq, "%s\n%d\n", alu[i].nome, alu[i].fone );
          }
          printf("GravaDadosMemoria: gravou %d nomes\n", i);
}

RemoveNovaLinha( char area[] ) {
        int  indNulo = strlen( area ) - 1;

        area[ indNulo ] = '\0';          // removo o '\n' que foi lido do arq para memoria
}

LerDadosGravados() {        // se existir "dadosAgenda.txt"

          FILE      *arq;        // serve para referenciar o arquivo aberto no disco
          int        i=0;
          char      area[100+1];
          printf("LerDadosGravados: Inicio\n&quot;
          arq = fopen("dadosAgenda.txt", "r&quot;  // tenta abrir arquivo para leitura "r"
          if( arq == NULL ) {
                  printf("LerDadosGravados: nao existia dadosAgenda.txt!\n&quot;
                  return;            // Volta para o menu principal
          }

          while( fgets( area, 100, arq ) != NULL) {
                RemoveNovaLinha( area );            // remove o '\n' do nome
                printf("nome [%s]...\n", area);
                strcpy( alu[i].nome, area );              // copia o nome para alu[i].nome
                if( fgets( area, 100, arq ) != NULL) {
                        RemoveNovaLinha( area );
                        printf("fone [%s]...\n", area);
                      alu[i].fone = atoi( area );
                }
                i++;
          }
          printf("LerDadosGravados: Leu %d registros para memoria\n", i );
          prox = i;
}

MostraMenu() {
    char  opc;
    printf("    AGENDA - ALUNO\n&quot;
    printf("    i) incluir\n&quot;
    printf("    l) Listar\n&quot;
    printf("    f) Fim\n&quot;
    printf("    Qual a Opcao?  &quot;
    scanf("%c", &opc );

    if( opc == '\n' ) {
            scanf("%c", &opc );  // joga fora o '\n' do teclado
    }

    return opc;
}

void
Incluir() {
    printf("    AGENDA - INCLUIR\n&quot;
    printf("    Nome?  &quot;
    scanf("%s", alu[prox].nome );
    printf("    Fone?  &quot;
    scanf("%d", &alu[prox].fone );
    printf("[%s-%d] foi incluido!\n", alu[prox].nome, alu[prox].fone);
    prox++;    // indica que a proxima linha na tab "alu" esta livre
}

void
Listar() {
    int  i;
    printf("    AGENDA - LISTAR\n&quot;
    printf("Nome    Fone\n&quot;
    for( i=0; i < prox; i++ ) {
            printf("%s    %d\n", alu[i].nome, alu[i].fone );
    }
    printf("---Fim da Listagem ---\n&quot;
}

int
main() {
        char opc,  termina = 'n';    // inicia com nao
        LerDadosGravados();    // recupera os dados da ativacao anterior, se existir
        do {
              opc = MostraMenu();
              if( opc == 'f' ) {
                      termina = 's';
              } else if( opc == 'i' ) {
                      Incluir();  // Ativa tela Incluir
              } else if( opc == 'l' ) {
                      Listar();  // Ativa tela Listar
              } else {
                      printf("[%c] opcao invalida!!!", opc );
                }
        } while( termina == 'n' );
        GravaDadosMemoria();            // grava os dados da memória para o arquivo
        printf("\nAteh +++\n&quot;
}
apimente.br
apimente.br Cyber Highlander Moderador
51.4K Mensagens 3.8K Curtidas
#2 Por apimente.br
11/04/2024 - 08:28
Qual é a dúvida?

Movido da sala "Papo Aberto" para a sala "Programação"

Por gentileza, observe a descrição das salas antes de criar um tópico nela.
O Linux não é o Windows
Como fazer perguntas inteligentes? Clique aqui!
Ao pedir ajuda, informe sua configuração completa e forneça detalhes suficientes para alguém te ajudar.

Gokuro
Gokuro Veterano Registrado
704 Mensagens 76 Curtidas
#6 Por Gokuro
11/04/2024 - 15:08
Código com correção da sintaxe (pré-compilado via gcc no Debian Linux):
#include <stdio.h>
#include <string.h>   // funções de string como "strlen"
#include <stdlib.h>   // funções padrões como "atoi"
// Segue arquivo da agenda2.c para rodar e relatar o teste

typedef struct {
  char nome[30+1];
  int  fone;
} Aluno;        //  novo tipo "Aluno" foi criado aqui

Aluno alu[100]; // cria tabela "alu" na memória com 100 linhas
int   prox;     // indice da proxima linha livre na tabela "alu"

// adicionada a declaração de tipo do resultado da função a
// ser retornado, no caso "void"
void GravaDadosMemoria() {
  FILE *arq;  // serve para referenciar o arquivo aberto no disco
  int  i;

  arq=fopen("dadosAgenda.txt", "w&quot;   // cria o arquivo para gravacao "w"
  if (arq == NULL) {
    printf("Erro: disco cheio!!!\n&quot;
    return;       // cancela gravacao
  }
  for (i=0; i < prox; i++ ) {
    printf("Gravando [%s]...\n", alu[i].nome);
    fprintf(arq, "%s\n%d\n", alu[i].nome, alu[i].fone);
  }
  printf("GravaDadosMemoria: gravou %d nomes\n", i);
}

void RemoveNovaLinha( char area[] ) {
  int indNulo = strlen( area ) - 1;
  area[ indNulo ] = '\0';  // removo o '\n' que foi lido do arq para memoria
}

void LerDadosGravados() { // se existir "dadosAgenda.txt"
  FILE *arq;    // serve para referenciar o arquivo aberto no disco
  int  i=0;
  char area[100+1];

  printf("LerDadosGravados: Inicio\n&quot;
  arq=fopen("dadosAgenda.txt", "r&quot;  // tenta abrir arquivo para leitura "r"
  if ( arq == NULL ) {
    printf("LerDadosGravados: nao existia dadosAgenda.txt!\n&quot;
    return; // Volta para o menu principal
  }

  while( fgets( area, 100, arq ) != NULL) {
    RemoveNovaLinha( area );            // remove o '\n' do nome
    printf("nome [%s]...\n", area);
    strcpy( alu[i].nome, area );              // copia o nome para alu[i].nome
    if ( fgets( area, 100, arq ) != NULL) {
      RemoveNovaLinha( area );
      printf("fone [%s]...\n", area);
      alu[i].fone = atoi( area );
    }
    i++;
  }
  printf("LerDadosGravados: Leu %d registros para memoria\n", i );
  prox = i;
}

char MostraMenu() {
  char  opc;

  printf("    AGENDA - ALUNO\n&quot;
  printf("    i) incluir\n&quot;
  printf("    l) Listar\n&quot;
  printf("    f) Fim\n&quot;
  printf("    Qual a Opcao?  &quot;
  scanf("%c", &opc );
  if (opc == '\n' {
    scanf("%c", &opc);  // joga fora o '\n' do teclado
  }
  return opc;
}

void Incluir() {
  printf("    AGENDA - INCLUIR\n&quot;
  printf("    Nome?  &quot;
  scanf("%s", alu[prox].nome );
  printf("    Fone?  &quot;
  scanf("%d", &alu[prox].fone );
  printf("[%s-%d] foi incluido!\n", alu[prox].nome, alu[prox].fone);
  prox++;    // indica que a proxima linha na tab "alu" esta livre
}

void Listar() {
  int  i;
  printf("    AGENDA - LISTAR\n&quot;
  printf("Nome    Fone\n&quot;
  for( i=0; i < prox; i++ ) {
    printf("%s    %d\n", alu[i].nome, alu[i].fone );
  }
  printf("---Fim da Listagem ---\n&quot;
}

int main() {
  char opc,  termina = 'n';    // inicia com nao
  LerDadosGravados();    // recupera os dados da ativacao anterior, se existir
  do {
    opc = MostraMenu();
    if( opc == 'f' ) {
      termina = 's';
    } else if( opc == 'i' ) {
      Incluir(); // Ativa tela Incluir
    } else if( opc == 'l' ) {
      Listar();  // Ativa tela Listar
    } else {
      printf("[%c] opcao invalida!!!", opc );
    }
  } while( termina == 'n' );
  GravaDadosMemoria();            // grava os dados da memória para o arquivo
  printf("\nAteh +++\n&quot;
}
Olavo França
Olavo França Ubbergeek Registrado
2.7K Mensagens 561 Curtidas
#7 Por Olavo França
11/04/2024 - 16:21
Boa tarde companheiros...

Para ser sincero faz vários anos que não programo em "C", mas eu notei duas pequenas falhas:


No código está assim:
arq=fopen("dadosAgenda.txt", "w&quot;   // cria o arquivo para gravacao "w"

....

arq=fopen("dadosAgenda.txt", "r&quot;  // tenta abrir arquivo para leitura "r"

....



Eu acho que deve ficar assim:

arq=fopen("dadosAgenda.txt", "w&quot);   // cria o arquivo para gravacao "w"

....

arq=fopen("dadosAgenda.txt", "r&quot);  // tenta abrir arquivo para leitura "r"

....


Olhando com mais atenção, encontrei várias linhas faltando o ")" em alguns comandos.

Espero ter ajudado !
Mobo Gigabyte B660M DS3H DDR4 - CPU Core i7 - 12700F 2.1 GHz - RAM 2x8GB + 2x16GB = 48GB 3200MHz DDR4 -
Corsair CX650M - 650 Watts -  GTX 1660 Super OC 6GB GDDR6
, SSD Sata de 500GB, NVMe de 1TB e HD de 2TB - Windows 11 Pro - 64 bits.
Não acreditar em Deus, é duvidar da própria existência de tudo....bom_trabalho.gifi
apimente.br
apimente.br Cyber Highlander Moderador
51.4K Mensagens 3.8K Curtidas
#9 Por apimente.br
11/04/2024 - 18:32
luiza-silva disse:

‎Apenas um comentário: Na mensagem tem um ícone de um lápis. Clicando nesse ícone você consegue corrigir erros de digitação.
O Linux não é o Windows
Como fazer perguntas inteligentes? Clique aqui!
Ao pedir ajuda, informe sua configuração completa e forneça detalhes suficientes para alguém te ajudar.

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal