I am making an algorithm that gets cases , then a name with surname , a and a size .
It should make a comparison and print them sorted by color in ascending order, in descending order and the names in ascending order .
This part of the comparisons is working well I believe, I think the problem is in reading data that always has some being skipped.
Example of input and output:
3
Maria Jose
branco P
Cezar Torres Mo
branco P
Baka Lhau
vermelho P
0
// A saída ficaria:
branco P Cezar Torres Mo
branco P Maria Jose
vermelho P Baka Lhau
The code I made is this:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct // Estrutura que contem as variáveis
{
char nome[100];
char cor[100];
char tam[100];
}camisetas;
camisetas pessoa[100]; // Método de acesso a estrutura
int casos, d = 0, A;
int comparaNome(const void * a, const void * b){
int r;
//r = strcmp((*(struct camisetas*)a).nome, (*(struct camisetas*)b).nome);
const camisetas *elemA = a;
const camisetas *elemB = b;
if (elemA -> cor == elemB -> cor){
if(elemA -> tam == elemB -> tam) {
return strcmp(elemA -> nome, elemB -> nome);
}
else return (elemA -> tam[0] - elemB -> tam[0]) * (-1);
}
else{
return elemA -> cor[0] - elemB -> cor[0];
}
}
int main(void)
{
int count, i, number; // Variáveis auxiliares
//char* array_string [number];
scanf("%dn", &casos);
while(casos != 0){ // Comando para encerramento do algoritmo
fflush(stdin);
//leitura do numero de casos
for(i = 0; i < casos; i++)
{
scanf("%[^n]", pessoa[i].nome );
scanf("%s %s", pessoa[i].cor, pessoa[i].tam );
//fgets(pessoa[i].cor, 15, stdin);
//fgets(pessoa[i].tam, 10, stdin);
fflush(stdin);
}
qsort(pessoa, 3 , sizeof(camisetas), comparaNome);
for(i = 0; i < casos; i++){
printf("%s %s %sn", pessoa[i].cor, pessoa[i].tam, pessoa[i].nome);
}
scanf("%dn", &casos);
fflush(stdin);
}
}
If someone can tell me the error thank you right away.