Così funziona:
codice:#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define chiamate 10 #define giorni 30 char *numeri[]= {"3341431454", "3462154556", "3911177368", "3338083794", "3398379801"}; typedef struct //Dichiarazione struct con io dati delle chiamate. { char *chiamante; int ricevente; int durata; } Dati; typedef struct //Dichiarazione struct contenente l'archivio mensile. { Dati elenco[chiamate][giorni]; } Archivio; Archivio creaDati() //Funzione per creare l'archivio, essa restituisce una struct di tipo Archivio. { int i=0, j=0, k=0; Archivio archivio; for (i=0; i<giorni; i++) { for (k=0; k<chiamate; k++) { archivio.elenco[k][i].chiamante=malloc(sizeof(Dati)); j=rand()%5; strcpy(archivio.elenco[k][i].chiamante, numeri[j]); archivio.elenco[k][i].ricevente = 1000000+rand()%999999+1; archivio.elenco[k][i].durata = rand()%121; } } return archivio; } void stampaDati(Archivio archivio) //Procedura per stampare l'archivio, prende come input una struct di tipo Archivio. { int i=0, k=0; for (i=0; i<=giorni;) { printf("\n\n\t\t----------[GIORNO %d]----------\n\n CHIAMANTE\t\tRICEVENTE\t\tDURATA", i+1); for (k=0; k<chiamate; k++) { printf("\n[C.%d] %s\t%d\t\t\t%d\tmin.", k+1, archivio.elenco[k][i].chiamante, archivio.elenco[k][i].ricevente, archivio.elenco[k][i].durata); } printf("\n\n\t\tPremi invio per scorrere l'elenco.\n\t\t Premi 'e' per ritornare.\n"); getchar(); if (getchar()=='e') break; else i++; } } void stampaElenco() //Procedura per stampare l'elenco dei numeri. { int i=0; printf("I numeri presenti nel database sono i seguenti:\n"); for (i=0; i<5; i++) printf("[N%d] (+39)%s\n", i+1, numeri[i]); getchar(); } int main() { srand(time(NULL)); Archivio simula; stampaElenco(); simula = creaDati(); stampaDati(simula); return 0; }
C'è ancora qualcosa di sbagliato (secondo me) nel fatto che premendo 'e' non esce, comunque dovresti riuscire a sistemare facilmente.
Il problema era nel ciclo for: avevi messo i<=giorni mentre deve essere i<giorni. Ricordati che si va da 0 a (giorni-1).
E poi c'erano due doppi cicli for, mentre uno è sufficiente.

Rispondi quotando