Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cossich

função gets

Recommended Posts

Isto é o que eu fiz, e quando o programa é compilado, o usuário não consegue escrever o nome do cliente, a leitura do nome do cliente é simplismente ignorada.

 

 

#include <stdio.h>
#include <string.h>
struct pessoa{
    int codigo;
    char nome[50];
    char telefone[20];
}cliente;
void main(){
    printf("Digite o codigo do cliente: ");
    scanf("%d",&cliente.codigo);
    printf("Digite o nome do cliente: ");    
    gets(cliente.nome);
    printf("Digite o telefone do cliente: ");
    gets(cliente.telefone);
    
    printf("\n\nCodigo = %d\tNome: %s\tTelefone: %s",cliente.codigo,cliente.nome,cliente.telefone);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use gets. É inseguro.

E main *sempre* tem tipo de retorno compatível com int. Não é void.
Leia isso por inteiro:

http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

http://en.cppreference.com/w/c/io/gets

 

The gets() function does not perform bounds checking, therefore this function is extremely vulnerable to buffer-overflow attacks. It cannot be used safely (unless the program runs in an environment which restricts what can appear on stdin). For this reason, the function has been deprecated in the third corrigendum to the C99 standard and removed altogether in the C11 standard. fgets() and gets_s() are the recommended replacements.

#include <stdio.h>
#include <string.h>
struct pessoa{
    int codigo;
    char nome[50];
    char telefone[20];
};
int main(void){
    printf("Digite o codigo do cliente: ");
    scanf("%d%*c", &cliente.codigo);
    printf("Digite o nome do cliente: ");    
    fgets(cliente.nome, 50, stdin);
    cliente.nome[strlen(cliente.nome)-1] = '\0';
    printf("Digite o telefone do cliente: ");
    fgets(cliente.telefone, 20, stdin);
    cliente.telefone[strlen(cliente.telefone)-1] = '\0';
    printf("\n\nCodigo = %d\tNome: %s\tTelefone: %s",cliente.codigo,cliente.nome,cliente.telefone);
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não use gets. É inseguro.

E main *sempre* tem tipo de retorno compatível com int. Não é void.

Leia isso por inteiro:

http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

http://en.cppreference.com/w/c/io/gets

#include <stdio.h>
#include <string.h>
struct pessoa{
    int codigo;
    char nome[50];
    char telefone[20];
}cliente;
int main(void){
    printf("Digite o codigo do cliente: ");
    scanf("%d%*c", &cliente.codigo);
    printf("Digite o nome do cliente: ");    
    fgets(cliente.nome, 50, stdin);
    cliente.nome[strlen(cliente.nome)-1] = '\0';
    printf("Digite o telefone do cliente: ");
    fgets(cliente.telefone, 20, stdin);
    cliente.telefone[strlen(cliente.telefone)-1] = '\0';
    printf("\n\nCodigo = %d\tNome: %s\tTelefone: %s",cliente.codigo,cliente.nome,cliente.telefone);
    return 0;
}

Muito obrigado, eu li os links e foram de grande ajuda. Apenas para que se outras pessoas forem utilizar o código, quando você o reformulou faltou declarar o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.