Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

rcd

scanf e gets

Mensagens Recomendadas

Hipnoted    6
Hipnoted

Como assim?

O scanf lê uma palavra, ou inteiro, etc...

O gets lâ uma string tenha espaçõe so não. Mas é aconselhável usar o fgets, já que o gets dá um WARNING.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rcd    0
rcd

vou explicar melhor a minha duvida:

char string[20],nome[30];
    
    printf("nome\n");
    scanf("%s",nome);
    
    printf("Introduza a string:   ");
    gets(string);

o meu problema é que o gets nao é executado ou seja executa ate ao scanf e depois passa pelo gets e nao faz nada, e completamente ignorado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

Experimenta isto:

char string[20],nome[30];
   
    printf("nome\n");
    scanf("%s",nome);
   
    printf("Introduza a string:   ");
    fgets(string,20,stdin);

Ou mete um getchar(); entre o printf e o fgets.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

Ou então não uses os scanf  :)

O problema é que o enter que dás ao introduzir a primeira string, lida com o scanf, fica no buffer de entrada e quando o gets tenta ler a string encontra-o e termina antes de ler.

Para ler strings o melhor é mesmo o fgets, como está no exemplo do Hipnoted, porque permite limitar o numero de caracteres lidos o que elimina a possibilidade de tentares escrever um string maior do que a variável, e não tem o problema de deixar lá o enter.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rcd    0
rcd

tou com um problema a escrever num ficheiro txt

imaginem esta situação

char string[20],nome[20],string1[20];
    
    printf("nome\n");
    scanf("%s",nome);
    
    getchar(); 
    printf("Introduza a string:   ");
    fgets(string,20,stdin);
    
    printf("Introduza a string:   ");
    fgets(string1,20,stdin);

    FILE *fp1;
    
    fp1 = fopen("ficheiro.txt","w");
    
    fprintf( fp1, "%s,%s,%s",nome,string,string1);

o problema é que a string1 vai ser escrita numa linha.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

À partida isso deve ser porque a própria string tem o caractere \n, ou a string ou a string1.

Podes fazer isto:

char *pchar;

...

if ((pchar=strchr(string,'\n'))!=NULL)

    *pchar='\0';

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

Para ler strings o melhor é mesmo o fgets, como está no exemplo do Hipnoted, porque permite limitar o numero de caracteres lidos o que elimina a possibilidade de tentares escrever um string maior do que a variável, e não tem o problema de deixar lá o enter.

o fgets também tem o problema de deixar lá o enter, o enter e todos os caracteres que inserires a mais para além do número de caracteres que especificaste no fgets.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

Realmente tens razão, pensava que não deixava  :-[

Sendo assim existe alguma opção  melhor para este tipo de situações??

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

Sendo assim existe alguma opção  melhor para este tipo de situações??

definires uma função que verifica se ficaram caracteres no buffer e, em caso afirmativo, removê-los. não sei se é a melhor opção, mas é a que normalmente uso.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bertolo    0
bertolo

Experimenta isto:

char string[20],nome[30];
   
    printf("nome\n");
    scanf("%s",nome);
   
    printf("Introduza a string:   ");
    fgets(string,20,stdin);

Ou mete um getchar(); entre o printf e o fgets.

tens de limpar o buffer:

com: while(getchar()!='\n');

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

Experimenta isto:

char string[20],nome[30];
   
    printf("nome\n");
    scanf("%s",nome);
   
    printf("Introduza a string:   ");
    fgets(string,20,stdin);

Ou mete um getchar(); entre o printf e o fgets.

tens de limpar o buffer:

com: while(getchar()!='\n');

Tenho de limpar quando precisar. Quase nunca o faço. ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade