Saludos.
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 {
gotoxy
(10,0);printf("***************Proyecto final Estructura**************"); gotoxy
(10,1);printf("***************:) HOLA**************");
gotoxy
(30,10);printf("Usuario: ");
gotoxy
(30,11);printf("Password: ");
/* 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';
if (strcmp(usuario
, USER
) == 0 && strcmp(password
, PASS
) == 0) { ingresa = 1;
} else {
gotoxy
(20,20);printf("El usuario y/o password son incorrectos"); contador++;
}
} while (ingresa == 0 && contador < 3);
if (ingresa == 0) {
gotoxy
(20,20);printf("Usted no pudo ingresar al sistema. ADIOS"); getchar(); return ingresa
; } else {
gotoxy
(25,20);printf("Bienvenido al sistema....\n");
/* */
}
return ingresa;
}
void sistema (void) {
char opc;
do
{
gotoxy
(30,8);printf("1.Registrar Datos"); gotoxy
(30,10);printf("2.Actualizar"); gotoxy
(30,12);printf("3.Eliminar"); gotoxy
(30,14);printf("4.Ordenar"); gotoxy
(30,16);printf("5.Salir"); switch(opc)
{
case '1': registrar(); break;
case '4': ordernar (); break;
}
}while (opc!='5');
}
void registrar (void) {
p_amigo = &amigo;
/* Introducimos los datos mediante punteros */
scanf("%i", &p_amigo
->codigo
); scanf( "%f", &p_amigo
->precio
); scanf( "%f", &p_amigo
->precio_v
);
}
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
}
}