Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Tycaio

[Resolvido] função gets()

Recommended Posts

Eu estou tentnado fazer uma agente com suporte de arquivos porém simplesmente o compilador quano eu fi tetar meu código, está ignorando a função "gets()" ... segue o código abaixo:

#include<stdio.h>
#include<conio.h>

void registrar(){
FILE *fp;
char nome[30];


fp=fopen("nomes.dta","w");
gets(nome);
fclose(fp);

}
void listar();


int main(void){
int opcao=0;
char string[20];
int i;

while(opcao!=5){
printf("\n\nAgendex1.1 versÆo beta\nAutor: Caio Ara£jo N. de Lima\n\n");
printf("Bem vindo a agenda eletr“nica!\nSegue abaixo as op‡äes e digite no campo o que deseja ser feito");
printf("Op‡äes:\n\n1.Cadastrar novo contato\n2.listar contatos\n5.Sair do programa\n\nOp‡Æo: ");
scanf("%d",&opcao);
switch (opcao){
case 1:
registrar();
break;
case 2:
listar();
break;
case 5:
break;
default:
printf("Option inválida!");
getch();
}

}
return 0;
}


void listar(){
printf("\n\nem construção");
getch();
}

o código aidan não está pronto pois eu não tive vontade de terminar com uma função que ...já testei No TC 3.0 e no dev-cpp...

espero que me ajudem ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve Tycaio.

Se abaixo o código do Programa acho que é isso que você quer fazer.. o codigo está todo comentado, qualquer dúvida estamos ai...


#include <stdio.h> /*DIFINE O FILE*/
#include <stdlib.h>

/*ESTRUTURA DO PRAGRAMA - TIPO DE DADOS*/
struct cadastro
{
/*DECLARAÇÃO DE VARIÁVEL NA ESTRUTURA - NOME*/
char nome[30];

}cadastro;/*TIPO DO ESTRUTURA*/

/*FINÇÃO QUE LISTA TODOS OS REGISTROS*/
void all (struct cadastro *Registration);

/*FUNÇÃO QUE ADCIONA O REGISTRO*/
void add (struct cadastro *Registration);

int main(void){

struct cadastro Registration[100];

char option;
char string[20];
int i;

/*MOSTRA NA TELA*/
printf(" +----------+----------+----------+----------+----------+----------+----------+\n");
printf(" ³ [INSERT] ³ ³ [F3] ³ ³ ³ | |\n");
printf(" +----------+----------+----------+----------+----------+----------+----------+\n");

/*...MOSTRA NA TELA*/
printf("\n Opcao: ");
/*FAZ O LOP PARA O MENU*/
do
{
option=getch();

/*SE A OPÇÃO FOR A TECLA [INSERT]*/
if (option == 82)
{

/*CHAMA FUNÇÃO QUE ADCIONA O REGISTRO*/
add(&Registration[i]);

/*ENCREMENTA MAIS UM PARA A VARIÁVEL I*/
i++;
}

/*SE A OPÇÃO FOR A TECLA F3*/
else if (option == 61)
{
/*CHAMA A FUNÇÃO LISTAR TODOS OS REGISTROS*/
all(Registration);
}

else if (option == 27)
{
/*SAI DO PROGRAMA*/
exit(1);
}

/*OÇÃO IGUAL A TECLA [ESC]*/
}while(option!=27);

}

/*FUNÇÃO QUE ADCIONA UM REGISTRO*/
void add (struct cadastro *Registration)
{
FILE *fp;

/*UM PONTEIRO PARA O ARQUIVO*/
char nome[30];

/*ABRE O ARQUIVO PARA A GRAVAÇÃO.ARQUIVO DEVE EXISTIR E PODE SR ALTERADO*/
fp=fopen("nomes.dta","rb+");

/*SE O QRQUIVO NÃO EXISTIR*/
if (fp == NULL)
{
/*CRIA UM OVO ARQUIVO*/
fp=fopen("nomes.dta","wb");
}

/*POSICIONA O PONTEIRO*/
fseek(fp,0,2);

/*MOSTRA NA TELA E PEDE O NOME*/
printf("\n Nome: ");

/*PEGA O VALOR DIGITADO E GUARDA PARA A GRAVAÇÃO*/
gets(cadastro.nome);

/*GRAVA A STRING INTEIRA*/
fwrite(&cadastro,sizeof(cadastro),1,fp);

/*FECHA A CONEXÃO COM O BANCO DE DADOS*/
fclose(fp);

/*APAGA OS DADOS DIGITADOS ANTERIORMENTE DA TELA*/
system("CLS");

/*CHAMA A FUNÇÃO PRINCIPAL*/
main();

}

/*FUNÇÃO QUE LISTA TODOS OS REGISTROS*/
void all (struct cadastro *Registration)
{
FILE *fptr;
/*SE O ARQUIVO NÃO EXISTIR*/
if ((fptr = fopen("nomes.dta","rb+")) == NULL) {

printf("\nError base de dados ao encontrada");

}
/*APAGA OS DADOS DIGITADOS ANTERIORMENTE DA TELA*/
system("CLS");

/*COLETA DE DADOS*/
while (fread(&cadastro,sizeof(cadastro),1,fptr) == 1) {

printf("\n%s",cadastro.nome);
}
/*FECHA A CONEXÃO COM O BANCO DE DADOS DADOS.MYSQL*/
fclose(fptr);

getchar();
system("CLS");
main();
}
#include <conio.h>

Compartilhar este post


Link para o post
Compartilhar em outros sites

e aí leardini beleza?????

a sua lógica tá massa man ;) valeu... eu conseguir resolver o problema...só que na realidade a questão era...o compilador ignonrava a função gets() tá ligado? em vem de executar ele ia pra outra linha.

mesmo assim valeu... eu resolvi criando um (goto).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resposta: usa o fflush (stdin); ou rewind(stdin); antes do gets para limpar o buffer.

Ex:


void cadastro_pf (){

char nome[20];

printf("Cadastro Pessoa fisica: ");
printf("\n\nNome do cliente: ");
fflush(stdin); //LIMPAR O BUFFER DE ENTRADA
gets(nome);
getch();
}

Lembrando que você pode usar no scanf também.

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





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

×