Ir ao conteúdo

Posts recomendados

Postado

Então minha dúvida é o que esta acontecendo, quando eu coloco 3 pessoas ele compila e ordena, mas se eu colocar 4 ou mais ele buga, aparece coisas estranhas, estou usando o qsort

 

Novo Documento de Texto.txt

 

typedef struct coisas
{
    int number;
    int pessoas;
    char nome[50];
} Coisas;
int comparaNome(const void *a, const void *b)
{
    int r = strcmp((*(struct coisas*)a).nome,
                   (*(struct coisas*)b).nome);

    if(r==0)
        return 0; //iguais
    else if(r<0)
        return -1; //vem antes
    else
        return 1; //vem depois

}
int main()
{
    setlocale(LC_ALL, "portuguese");
    int x;
    printf("Digite a quantidade de pessoas : ");
    scanf("%d", &x);
    Coisas c[x];
    int i=0;
    getchar();

    for(; i<x; i++)
    {
        printf("Digite o %d° nome: ", (i+1));
        fgets(c.nome, 50, stdin);
        printf("Digite a %d° idade: ", (i+1));
        scanf("%d", &c.number);
        qsort(c, x, sizeof(struct coisas), comparaNome);

    }

    printf("\t-DADOS EM ORDEM ALFABETICA-\n");

    for(i=0; i<x; i++)
    {
        printf("%s\n", c.nome);
    }
    return 0;
}
 

  • Curtir 1
Postado

@Paula_Fabiana    este código está incompleto, mas o arquivo que você enviou está completo,  e ele está dando erro por que você colocou o typedef  com dimensões  determinada por variável , então coloque um valor fixo,  aqui coloquei 100, então poderá cadastrar até 100 pessoas :

   e seu código ficaria assim ;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <vector.h>
typedef struct coisas
{
    int number;
    int pessoas;
    char nome[50];
}Coisas;
int comparaNome(const void *a, const void *b)
{
    int r = strcmp((*(struct coisas*)a).nome,
                   (*(struct coisas*)b).nome);

    if(r==0)
        return 0; //iguais
    else if(r<0)
        return -1; //vem antes
    else
        return 1; //vem depois

}
int main()
{
    setlocale(LC_ALL, "");
    int x;
    printf("Digite a quantidade de pessoas : ");
    scanf("%d", &x);
    Coisas c[100];
    int i;
    //getchar();

    for(i=0; i<x; i++)
    {
        printf("Digite o %d° nome: ", (i+1));
        setbuf(stdin,NULL);
        fflush(stdin);
        fgets(c[i].nome, 50, stdin);
        printf("Digite a %d° idade: ", (i+1));
        setbuf(stdin,NULL);
        fflush(stdin);
        scanf("%d", &c[i].number);
        //qsort(c, x, sizeof(struct coisas), comparaNome);
    }
    printf("\t-DADOS EM ORDEM ALFABETICA-\n");

    for(i=0; i<x; i++)
    {
        printf("%s", c[i].nome);
    }
    return 0;
}

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!