• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rcd

scanf e gets

15 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que eu quero dizer é que oa string1 vai ser escrita numa linha a seguir :-[.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

À 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';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

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