Estoy tratando de ordenar un struct por un dato int en especifico.(campo "codigo" para ser exactos). Pero me tira un error al compilar y ni diablos con el. Aqui les dejo el codigo a ver que tal.
El error es el siguiente: [Error] no match for 'operator[]' (operand types are 'estructura_amigo' and 'int')
Este es el código:
Código C:
Ver original
#include <stdio.h> #include <iostream> #include <conio.h> #include <windows.h> #include <string.h> #define USER "admin" #define PASS "admin" #define L 80 /* Longitud máxima de las cadenas */ int loggin (void); void sistema (void); void registrar (void); void ordernar (void); void gotoxy(int x,int y){ HANDLE hcon; hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos; dwPos.X = x; dwPos.Y= y; SetConsoleCursorPosition(hcon,dwPos); } struct estructura_amigo { int codigo; char nombre[40]; float precio; float precio_v; char suplidor[40]; }; struct estructura_amigo amigo, *p_amigo; int main () { int temp=1; temp=loggin(); if(temp!=0) { sistema(); } return 0; } int loggin (void) { char usuario[L + 1], password[L + 1]; int contador = 0 ; char ingresa = 0; /* Variable booleana 1 = true, 0 = false */ int i = 0; /* Indica la posición del caracter leído en la cadena */ char caracter; /* Guarda el caracter leído mediante la función getch */ do { /* Lectura del password */ i = 0; /* Indica la posición del caracter leído en la cadena */ while (i < L && caracter != 13) { password[i] = caracter; i++; } password[i] = '\0'; ingresa = 1; } else { contador++; } } while (ingresa == 0 && contador < 3); if (ingresa == 0) { } else { /* */ } return ingresa; } void sistema (void) { char opc; do { switch(opc) { case '1': registrar(); break; case '4': ordernar (); break; } }while (opc!='5'); } void registrar (void) { p_amigo = &amigo; /* Introducimos los datos mediante punteros */ } void ordernar (void) { /*system("cls"); while(p_amigo!='\0') { printf( "Codigo Producto: %i ", p_amigo->codigo); printf( " Nombre: %s ", p_amigo->nombre); printf( "Precio: %f.\n", p_amigo->precio); }*/ int i,j, bandera,aux,n; for(i=1; i<n; i++) { bandera=0; //inciamos la bandera en 0 for(j=n-1; j>=i; j--){ if(amigo[j-1].codigo > amigo[j].codigo){ aux=amigo[j].codigo; amigo[j].codigo=amigo[j-1].codigo; amigo[j-1].codigo=aux; bandera=1; //si hubo cambio cambiamos la bandera a 1 } } if (bandera==0) break; //si no hubo cambios entonces salir del for } }