C: Una función que reciba un parámetro desde una struct e imprima.

Iniciado por ElChulon, 9 Abril 2016, 19:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

ElChulon

.

MAFUS

Cuándo pongas la etiqueta 'code' para poner el código usa, en la apertura 'code=c' para el resalto de sintaxis.
No uses fflush(stdin), muy mala práctica.

Pon todo el código para que podamos ver dónde está el fallo. Aquí solo se ve como llenas una estructura.

ElChulon

Cita de: MAFUS en  9 Abril 2016, 20:14 PM
Cuándo pongas la etiqueta 'code' para poner el código usa, en la apertura 'code=c' para el resalto de sintaxis.
No uses fflush(stdin), muy mala práctica.

Pon todo el código para que podamos ver dónde está el fallo. Aquí solo se ve como llenas una estructura.

Lo que he "hecho" lo he eliminado porque no tengo ni idea de qué hacia, y hasta ahora solo tengo eso. Necesito "tips" para saber como hacer la función que reciba el parámetro e imprima la cantidad de users en la sala de chat :(

Mi profesor de programación dijo que utilizáramos fflush(stdin), porque sino ocurría esto al ejecutar el programa:



No tengo mucho tiempo en C, no conozco exactamente la función que realiza fflush(stdin) (creo que era como para limpiar o algo así) pero la utilizo cada vez que sucede eso

Gracias por la sugerencia sobre la etiqueta.

MAFUS

fflush sirve para vaciar flujos de salida, según dice el estándar: fflush(stdout) hará que el programa escriba todo lo que le queda por escribir a la pantalla, por ejemplo. Sin embargo fflush no está pensado para flujos de entrada por lo que fflush(stdin) no está definido: puede funcionar o no, depende del compilador.

En CHATROOM tienes un array e punteros a USER. Con esto te complicas un poco la existencia, por así decirlo.
Puedes hacer dos cosas:
1. Un array de USER con lo que trabajarías con un array normal
2. Una lista enlazada, eso es dentro de CHATROOM habría un puntero a USER y todo el trabajo lo harías con funciones orientadas a listas.

Gunhack

Date  ;D Espero que sea intuitivo el código :P

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <windows.h>

using namespace std;

struct USER {

char nick[25];
char ip[16];
char email[30];
};

struct CHATROOM {

int roomid;
char nombre[20];
int nUsers; //Número actual de usuarios
USER lista[40];
};

void nuevoChat(int maxChats, int &nChats, CHATROOM Chat[]); //Agrega un nuevo chat a la lista de chats
int agregarUsuario(int nChats, CHATROOM Chat[]); //Agrega un usuario nuevo a un chat específico
void ImprimeUsuarios(int indexChat, int nChats, CHATROOM Chat[]); //Imprime los usuarios dentro de el chat seleccionado o todos
void Flush(); //Elimina la basura ( Como si fuera "flush()" )

int main() {

    int maxChats = 10; //Numero máximo de Chats
    int nChats = 0; //Numero actual de Chats
    char op; //Variable auxiliar para el menu de opciones
    CHATROOM Chat[maxChats]; // Arreglo de chats

    //Creando un chat nuevo por defecto
    Chat[nChats].roomid = nChats + 1; //Esto no es necesario en realidad, ya que no usamos el id de chat
    Chat[nChats].nUsers = 0; // Ya que es un chat nuevo no contiene Usuarios, por eso se iguala a 0
    strcpy(Chat[0].nombre, "CHAT 1"); //Ponemos nombre al nuevo chat
    nChats++; //Aumentamos el numero de chats

    while(true) {

        system("cls");
        printf("***MENU DE CHATS***\n\n");

        printf("1.- Agregar nuevo chat.\n");
        printf("2.- Agregar usuario a chat.\n");
        printf("3.- Imprimir usuarios de chat.\n");
        printf("4.- Imprimir usuarios de chat especifico.\n");
        printf("5.- Salir.\n\n");
        printf("Seleccione su opcion: ");
        scanf("%c", &op);

        system("cls");
        Flush();

        switch(op) {

        case '1':

            nuevoChat(maxChats, nChats, Chat);
            break;

        case '2':

            agregarUsuario(nChats, Chat);
            break;

        case '3':

            ImprimeUsuarios(0,nChats, Chat);
            break;

        case '4':

            int indexChat;
            printf("Ingresa el ID del chat al que ingresara: ");
            scanf("%d", &indexChat);

            while(indexChat < 0 || indexChat -1 >= nChats){

               printf("\nNo existe ningun chat con ese id!");
               printf("\n\nIngresa el ID del chat al que ingresara: ");
               scanf("%d", &indexChat);
            }

            Flush();
            system("cls");
            ImprimeUsuarios(indexChat,nChats, Chat);
            break;

        case '5':

            return 0;
            break;

        default:

            printf("Opcion invalida! ");
            break;
        }

        system("Pause");
    }
}

void nuevoChat(int maxChats, int &nChats, CHATROOM Chat[]) {

    if(nChats < maxChats) {

        printf("***AGREGAR NUEVO CHAT***\n\n");

        Chat[nChats].nUsers = 0;

        printf("Ingresa el nombre del nuevo Chat: ");
        gets(Chat[nChats].nombre);

        Chat[nChats].roomid = ++nChats;

        printf("\nChat Agregado!\n\n");
    } else {

        printf("\n\nError, maximo de chats alcanzado!\n\n");
    }
}

int agregarUsuario(int nChats, CHATROOM Chat[]) {

    int indexChat;
    USER newUs;

    printf("***AGREGAR NUEVO USUARIO***\n\n");

    printf("Ingresa el ID del chat al que ingresara: ");
    scanf("%d", &indexChat);

    while(indexChat < 0 || indexChat -1 >= nChats){

       printf("\nNo existe ningun chat con ese id!");
       printf("\n\nIngresa el ID del chat al que ingresara: ");
       scanf("%d", &indexChat);
    }

    Flush();

     printf("\n\n** Ingreso a %s **\n", Chat[indexChat - 1].nombre);

    if(Chat[indexChat - 1].nUsers <= 40) {

        printf("\nIngresa su nick: ");
        gets(newUs.nick);
        printf("Ingresa su IP: ");
        gets(newUs.ip);
        printf("Ingresa su email: ");
        gets(newUs.email);

        Chat[indexChat - 1].lista[Chat[indexChat - 1].nUsers] = newUs;
        Chat[indexChat - 1].nUsers++;
        printf("\nUsuario agregado!\n\n");

    } else {

        printf("\nMaximo de usuarios alcanzado!\n\n");
    }
}

void ImprimeUsuarios(int indexChat, int nChats, CHATROOM Chat[]) {

    if(indexChat == 0) {

        for(int i = 0; i < nChats; i++) {

            printf("** USARIOS EN %d: %s **\n\n", i+1, Chat[i].nombre);

            for(int j = 0; j < Chat[i].nUsers; j++) {

                printf("- Usuario %d -\n", j+1);
                printf("Nick: %s\n", Chat[i].lista[j].nick);
                printf("IP: %s\n", Chat[i].lista[j].ip);
                printf("Email: %s\n\n", Chat[i].lista[j].email);
            }
            printf("\n");
        }
    } else {

        printf("** USARIOS EN %d: %s **\n", indexChat, Chat[indexChat-1].nombre);

        for(int j = 0; j < Chat[indexChat-1].nUsers; j++) {

            printf("- Usuario %d -\n", j+1);
            printf("Nick: %s\n", Chat[indexChat-1].lista[j].nick);
            printf("IP: %s\n", Chat[indexChat-1].lista[j].ip);
            printf("Email: %s\n\n", Chat[indexChat-1].lista[j].email);
        }
        printf("\n");
    }
}

void Flush() {

    char trash[10];
    gets(trash);
}

ElChulon

Por mi vida santísima, espero algún día poder hacer eso jaja, gracias!

HardForo

No entiendo que pasa en este foro..... entro a leer los posts "viejos" y los primeros posts de cada hilo fueron editados y no contienen nada.  :silbar:

Eso no pasa en otros foros (con esta frecuencia al menos)

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *