Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MAFUS

#881
No debes hacer
Código (c++) [Seleccionar]
strcat(final->caracteres, t1 ->caracteres);
porque lo primero que hace la función es buscar el caracter '\0' de la cadena final. Al no haberla inicializada a 0 esta contiene datos aleatorios y '\0' puede estar en cualquier sitio. Una vez que strcat encuentra este carácter nulo empezará a copiar t1 ahí.

Para solucionarlo cambia strcat por strcpy que copia desde el principio de la cadena.

Por otra parte: es de mala práctica esconder puntero detrás de un typedef. Mejor si dejas los punteros vistos.
#882
Los arrays son inamovibles. Crea otro y copia lo que necesites del primero, o pon la marca de fin de cadena donde sea necesario, o sustiyes con espacios los caracteres que sobran.
#883
Puedes hacer dos cosas:
1. Para los que empiezan. Justo después de la declaración de variables
for(i=0; i < 6; ++i)
    q[i] = 0;


2. Para los que ya han visto un poco más de arrays. Cuando declares q simplemente debes hacerlo
q[6] = {0};
#884
Soluciona q, como te he dicho, y el programa funcionará.
#885
q está mal, no tiene inizializado a 0 ninguno de sus índices antes de empezar a sumar por lo tanto siempre dará valores extraños.
#886
Creo que info es un typedef de char.
#887
Sácalo de la función y conviértelo en global, así lo tendrás visible para todas las funciones.
#888
Algo así (solo se muestran las modificaciones al original):

typedef struct pedido{
    char nombrecliente[20],domicilioentrega[20];
    tfecha fechadepedido;
    int esValido; // <-- inclusión
}tpedido;

void inicializar_lista(tpedido lista[]) { // <-- Nueva función. Debe ser el primer código que se
    int i;                                //         ejecute dentro de main(), después de la
                                          //         declaración de las variables
    for(i=0; i<5; ++i)
        lista[i].esValido = 0;
}

void cargarvectorpedidos(tpedido V[]){
    int cantidad, i;
    tpedido aux;
   
    printf("Ingrese la cantidad de encomiendas a cargar \n");
    fflush(stdin);
    scanf("%d", &cantidad);

    for(i=0; i<cantidad; i++){
        printf("\nIngrese los datos para la encomienda %d:\n",i+1);
        cargarpedido(&aux);
        V[i]=aux;
        V[i].esValido = 1; // <-- inclusión
        system("cls");
    }
}

void mostrarvectorpedidos(tpedido V[]) {
    int j;
   
    system("pause");
    system("cls");
    printf("\n Listado de encomiendas:\n");

    for(j=0; j<5; j++) {
        if(V[j].esValido) // <-- inclusión
            mostrarpedido(V[j]);
        }
    }
   
    system("pause");
    system("cls");
}


int main()
{
    tpedido X[5];
    int op;
   
    inicializar_lista(X); // <-- Llamada a la nueva función
    while(op!=4)
    // ...
}
#889
¿Has visto listas enlazadas?
Lo que planteas es un problema que se resuelve con ellas.

Si no las has visto y solo puedes usar arrays tendrás podrías resolver el problema poniendo un campo más en tu estructura diciendo si el registro es útil. Cada vez que incluyas un registro buscas el primero que no sea útil (esté vacío) y lo incluyes allí. Para visualizar repasas toda la lista y solo muestras los marcados como útiles. Para borrar solo debes marcar el registro de interés como inútil.
También podrías hacer lo mismo sin ese campo pero creando un array paralelo, que tendrán que ser recorridos al mismo tiempo, en el que solo guardaría la información de si el registro es válido.
#890
Supongo que, al igual que scanf, cin usa los espacios en blanco como separadores de datos. Cuando encuentra uno cree que ha llegado al final de la cadena esperada.
En C++, creo que para adquirir una cadena con espacios es con
Código (c++) [Seleccionar]
std::getline(std::cin, mi_cadena);