Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal. Estou com um programa desafio que não estou conseguindo fzr certa parte.

O desafio é o seguinte:

Escreva um programa que tem as 3 vetores (unidimensionais) nome[20] e 3 vetores email[30] declaradas como variáveis globais. Na função main()  faça um menu com as seguintes funções:

 

   1 – entrada de dados.

   2 – lista todos os dados na tela.

   3 – pesquisa um nome completo e mostra na tela

   4 – pesquisa os nome pela 1. letra e mostra todos na tela.

   5 – altera  dados. Com pesquisa pelo nome

   6 – exclui dados. Com pesquisa pelo nome

   7 - saída

 

OBS: Os 6 vetores devem ser escritos e lidos de um arquivo.

 

Já consegui fzr parte do desafio, mas ainda me falta entrar com os 3 nomes e 3 emails. Não consegui achar uma solução, a não ser que eu use um vetor bidimensional, mas nesse caso estaria usando um recurso que não é permitido pela ativida já que ela pede apenas vetores unidimensionais.

Alguém poderia dar uma força nessa parte do programa para assim eu continuar com a atividade.

 

Código:

 

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

//variáveis globais
char nome1[20], nome2[20], nome3[20];
char email1[30], email2[30], email3[30];

//protótipos das funções
void EscreverDados();
void LerDados();

//ponteiro
FILE *arquivo;

//MAIN
void main(){
    setlocale(LC_ALL, "portuguese"); //pontuação
    short menu;
    do{
        system("color A");
        system("cls");
        printf("*******************| SEJA BEM-VINDO! |******************* \n");
        printf("\nEntrada de dados\n\nInsira sua opção;\n");
        printf("1 * Entrada de dados\n");
        printf("2 * Lista todos os dados na tela\n");
        printf("3 * Pesquisa um nome e mostra na tela\n");
        printf("4 * Pesquisa os nomes pela 1ª Letra e mostra todos na tela\n");
        printf("5 * Altera dados\n");
        printf("6 * Exclui dados\n");
        printf("7 * Sair\n");
        scanf("%d", &menu);
        system("cls");
        switch(menu){
            case 1:
                printf("**** ENTRADA DE DADOS ****\n");
                getchar();
                printf("\nInsira o 1º Nome--> ");
                gets(nome1);
                printf("Insira o 1º E-mail--> ");
                gets(email1);
                EscreverDados();
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 2:
                printf("**** LISTAGEM DE TODOS OS DADOS ****\nNomes:\n");
                getchar();
                LerDados();
                printf("--> %s\n", nome1);
                printf("--> %s\n\n", email1);
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 3:
                //a ser feita...
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 7:
                system("color a");
                getch();
                exit(0);
                break;
        }
    }while(menu != 7);
}

void EscreverDados(){ //função para escrever nos arquivos
    arquivo = fopen("arq.txt", "wt");
    fwrite(nome1, 1, sizeof(nome1), arquivo);
    fwrite(email1, 1, sizeof(email1), arquivo);
    fclose(arquivo);
}

void LerDados(){//Le todos os dados
    arquivo = fopen("arq.txt", "rt");
    fread(nome1, 1 , sizeof(nome1), arquivo);
    fread(email1, 1 , sizeof(email1), arquivo);
    fclose(arquivo);
}

void LerNomes(){//Le os nomes
    arquivo = fopen("arq.txt", "rt");
    fread(nome1, 1 , sizeof(nome1), arquivo);
    fclose(arquivo);
}

 

  • Obrigado 1
Postado

@Malcolm X     creio que para arquivo binário ,  usa se wb para criar para gravar nele a partir do começo dele  ,  e rb para ler nele a partir do inicio dele ,  e ab    para abrir um arquivo que já existe e gravar nele a partir do final dele ,  e seria melhor usar dois arquivos sendo um para cada vetor ,  e então seu código poderia ser assim  : 

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

//variáveis globais
char nome1[3][20], nome2[3][20], nome3[3][20];
char email1[3][30], email2[3][30], email3[3][30];
//protótipos das funções
void EscreverDados();
void LerDados();
void getch();
//ponteiro
FILE *arquiva_nome, *arquiva_email;

//MAIN
int main(){
//    setlocale(LC_ALL, "portuguese"); //pontuação
    short menu;
    int j,i;
    do{
        system("color A");
        system("cls");
        printf("*******************| SEJA BEM-VINDO! |******************* \n");
        printf("\nEntrada de dados\n\nInsira sua opção;\n");
        printf("1 * Entrada de dados\n");
        printf("2 * Lista todos os dados na tela\n");
        printf("3 * Pesquisa um nome e mostra na tela\n");
        printf("4 * Pesquisa os nomes pela 1ª Letra e mostra todos na tela\n");
        printf("5 * Altera dados\n");
        printf("6 * Exclui dados\n");
        printf("7 * Sair\n");
        scanf("%d", &menu);
        system("cls");
        switch(menu){
            case 1:
                printf("**** ENTRADA DE DADOS ****\n");
                getchar();
                for(i=0; i<3; i++)
                {
                    printf("\nInsira o 1º Nome--> ");
                    gets(nome1[i]);
                    printf("Insira o 1º E-mail--> ");
                    gets(email1[i]);
                }
                EscreverDados();
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 2:
                printf("**** LISTAGEM DE TODOS OS DADOS ****\nNomes:\n");
                getchar();
                LerDados();
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 3:
                //a ser feita...
                printf("\n\n--Tecle algo para voltar ao menu--");
                getch();
                break;
            case 7:
                system("color a");
                printf("\n\n     Tecle  . . .!\n");
                getch();
                break;
        }
    }while(menu != 7);
    return 32768;
}

void EscreverDados(){                                      //função para escrever nos arquivos
    int i;
    arquiva_nome = fopen("arq_nome.BIN", "ab");            // tenta abrir o arquivo para leitura
    if(arquiva_nome == NULL)                               //  se o arquivo não existir
    arquiva_nome = fopen("arq_nome.BIN", "wb");            // CRIA e abre UM ARQUIVO DO TIPO BINÁRIO
    arquiva_email = fopen("arq_email.BIN", "ab");          // tenta abrir o arquivo para leitura
    if(arquiva_email == NULL)                              //  se o arquivo não existir
    arquiva_email = fopen("arq_email.BIN", "wb");          // CRIA e abre UM ARQUIVO DO TIPO BINÁRIO
    for(i=0; i<3; i++)
    {
        fwrite(nome1 , 1, sizeof(nome1  ), arquiva_nome ); // grava no arquivo binário
        fwrite(email1, 1, sizeof(email1 ), arquiva_email); // grava no arquivo binário
    }
    fclose(arquiva_email);                                 // fecha o arquivo
    fclose(arquiva_nome );                                 // fecha o arquivo
}

void LerDados()                                           //Le todos os dados
{
    int i;
    arquiva_nome = fopen("arq_nome.BIN", "rb");           // tenta abrir o arquivo
    if(arquiva_nome == NULL)return;                       // se o arquivo não existir retorna nada
    arquiva_email = fopen("arq_email.BIN", "rb");         // tenta abrir o arquivo
    if(arquiva_email == NULL)return;                      // se o arquivo não existir retorna nada
    for(i=0; i<3; i++)
    {
        fread(nome1 , 1 , sizeof(nome1 ), arquiva_nome ); // Lê no arquivo binário
        fread(email1, 1 , sizeof(email1), arquiva_email); // Lê no arquivo binário
        printf("--> Nome ---: %s\n"  , nome1 [i] );
        printf("--> EmaiL --: %s\n\n", email1[i] );
    }
    fclose(arquiva_email);                                // fecha o arquivo
    fclose(arquiva_nome );                                // fecha o arquivo
}

void LerNomes(){//Le os nomes
    int i;
    arquiva_nome = fopen("arq_nome.txt", "rb");           // tenta abrir o arquivo
    if(arquiva_nome == NULL)return;                       // se o arquivo não existir retorna nada
    fread(nome1, 1 , sizeof(nome1), arquiva_nome);        // Lê  no arquivo
    for(i=0; i<3; i++)
    {
        printf("--> Nome ---: %s\n"  , nome1[i]   );
    }
    fclose(arquiva_nome);                                 // fecha o arquivo
}
void	getch()                                           //  função para pausar  para não usar a biblioteca conio.h
{
  FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));//  funções da API  do windows
  WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), INFINITE);//  funções da API  do windows
}

 

  • Curtir 1

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!