Ir para conteúdo
Fórum Script Brasil
  • 0

Erro no uso de gets


0Cesario0

Pergunta

na compilação desta parte do programa em C usando o Dev-C/C++:

...

printf("Digite a identificacao do cheque e o seu valor para os %d cheques\n",n);
 for(i=0; i<n; i++)
 { printf("Cheque %d: ",i+1);
   
   gets(ident[i]);
   printf("          ");
   scanf("%f",&val[i][0]);    
 }

...

aconteceu que o compilador simplesmente pulou a linha [ gets(ident); ] e exibiu os caracteres em branco. Como eu resolvo este problema? Uso alguma outra função para substituir gets ou adiciono algo?

(neste caso frases são esperadas, e não apenas palavras, daí o uso de gets)

OBS: ident e val foram definidas da seguinte maneira : char ident[n][40] ; onde n no caso é um inteiro a ser recebido.

float val[n][3];

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

O protótipo de gets é o seguinte:

char *gets(char *str);

Logo ele espera receber um ponteiro do tipo char.

--- Não vi as obs... ---

Fiz um teste assim:

char vet[10][40];
    int i;
    

    
    for(i=0; i<10; i++)
    { 
             printf("Cheque %d: ",i+1);
             
             gets(vet[i]);
             
             puts(strcat(vet[i],"\n")); 
    }

e deu certo.

Editado por FoXxD
Link para o comentário
Compartilhar em outros sites

  • 0
O protótipo de gets é o seguinte:

char *gets(char *str);

Logo ele espera receber um ponteiro do tipo char e retorna um ponteiro deste tipo.

Enfim, ele lê uma string e retorna uma string.

Do jeito que você fez: gets(ident); estará passando o valor da que está contido em ident para gets e ele na verdade quer um endereço de memória.

Tente fazer o seguinte:

gets(&ident);

E pra mostrar o valor

printf("%s", &ident);

Se quiser pode substituir por scanf:

scanf("%s", &ident);

Enfim há várias formas. Você também pode usar um ponteiro e usar como matriz.

Não. gets(ident) está passando um endereço de memória. Se ident é definido como ele falou, então ident é um ponteiro para ponteiro. char** ident. Ao deferenciar com ident, agora ele passou de um char** para char*.

gets(ident) está correto, acredito que não seja esta parte que esteja dando problema. Você está usando scanf antes dessa chamada ao gets?

Outra coisa: gets é ruim, scanf é pior. Você deveria usar fgets.

E ainda: declarar uma variável desta forma (com um tamanho variável) sequer funciona? O compilador não reclama? Eu acho que você deveria é estar usando malloc ou calloc.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu já tive esse problema, apenas dupliquei o comando e resolveu... funcionou como se eu tivesse apenas um... Não sei o porque...

Ao invés de:

printf("Informe o nome do Professor\n");

gets(nome);

ficou:
gets(nome);

printf("Informe o nome do Professor\n");

gets(nome);

Estava tendo o mesmo problema que você, e isso solucionou, só não sei o porque...

ps: nome foi definido por:

char nome[MAX];
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...