Ciao a tutti ragazzi, ho un grande dubbio.
Vorrei sapere come si fanno le strutture.. Mi basterebbe un esempio facile da cui io possa dedurre..
Ringrazio in anticipo chiunque mi voglia aiutare..
Ciao a tutti ragazzi, ho un grande dubbio.
Vorrei sapere come si fanno le strutture.. Mi basterebbe un esempio facile da cui io possa dedurre..
Ringrazio in anticipo chiunque mi voglia aiutare..
Un esempio di struttura e' la seguente
struct contatto
{
char cognome[50];
char nome[50];
unsigned char eta;
char sesso;
char email[100];
};
ma la tua domanda e' troppo generica per andare oltre ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
...e tra l'altro trova risposta in qualsiasi libro sul linguaggio C.ma la tua domanda e' troppo generica per andare oltre ...
"Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."
Sto cercando di capire leggendo da questo programma:
Data questa dichiarazione:codice:#include <stdio.h> #include <stdlib.h> /* Realizzare un programma capace di leggere un file di testo relativo ai dati di accesso ad un computer da parte di alcuni utenti (log file), e di realizzare delle statistiche. Il file contiene i dati di accesso nella forma: nomeUtente:Cognome:Nome: directory:dataDiAccesso:durataInSecondi e contiene una riga per ogni accesso dell' utente (quindi piu' righe per ogni utente, non ordinate in alcun modo). Il campo nomeUtente ha al piu' 20 caratteri Il computer puo' avere non piu' di 10 utenti, ma alcuni di questi non sono mai stati usati e quindi non ci sono righe nel file di log. Il programma deve presentare i dati di avvesso di ogni singolo utente attivo (cioe' per cui si e' trovato almeno un accesso) visualizzando in un grafico la durata media e massima dei collegamenti. */ #include "dichiarazioni.h" #define MAXLINE 1000 int getline(char s[], int lim, FILE *f); int main(int argc, char *argv[]) { FILE *fin; char line[MAXLINE]; char segment[MAXLINE]; struct linea t; int i; /* inizializza la struttura a disposizione */ init(); fin = fopen(argv[1], "r"); while ( getline(line, MAXLINE, fin) >0 ) { caricaStringa( line); } /*esegue i calcoli sulla struttura */ calcola(); for(i=0; i < NUMUTENTI; i++) { t=getInfo(i); if (t.numAccessi>0) printf("utente %s: tmax=%d, tmedio=%d, num Accessi %d\n", t.nomeUtente, t.tmax, t.tmedio, t.numAccessi); } return 0; } /*---------------------------------------------------------------------------*/ int getline(char s[], int lim, FILE *f) { int c, i; for (i=0; i<lim-1 && (c=getc(f)) != EOF && c != '\n'; i++) s[i]=c; if (c=='\n') { s[i]=c; ++i; } s[i]='\0'; return i; } #include <stdio.h> #include "dichiarazioni.h" /* Funzioni di supporto al programma */ /*------------------------------------------------------*/ /* copia una stringa in un'altra */ void strcp(char *s, char *t) { while(*s++ = *t++); } /*------------------------------------------------------*/ /* verifica se due stringhe sono uguali */ int uguali(char *s, char *t) { int i; for (i=0; s[i]==t[i]; i++) ; i--; if ( (s[i]=='\0' ) && (t[i] == '\0') ) return 1; return 0; } #include <stdio.h> #include "dichiarazioni.h" /* Gestione del vettore di strutture */ struct linea r[NUMUTENTI]; /*----------------------------------------------*/ /* inizializza la struttura */ void init(){ int i; for(i=0; i < NUMUTENTI; i++){ strcp(r[i].nomeUtente, "-"); r[i].tempo=-1; r[i].tmedio=-1; r[i].tmax=-1; r[i].numAccessi=0; } } /* -------------------------------------------------------------------- */ /* Carica la struttura usando la stringa passata */ void caricaStringa(char *stringa) { char utente[DIMCAMPO]; char d[DIMCAMPO]; int tempo; char segmento; int c=0; sscanf(stringa, "%s %s %s %s %s %d", utente, d, d, d, d, &tempo); carica(utente, tempo); } /* -------------------------------------------------------------------- */ /* Carica la struttura con i parametri passati */ void carica (char *utente, int secondi) { int i; int trovato=0; for (int i=0; i< NUMUTENTI; i++){ if (uguali(utente, r[i].nomeUtente)){ trovato=1; r[i].tempo += secondi; r[i].tmedio += secondi; r[i].numAccessi++; if( r[i].tmax < secondi ) r[i].tmax=secondi; } } if (!trovato) { /* trova il posto libero */ for (i=0; r[i].numAccessi != 0; i++); strcp(r[i].nomeUtente, utente); r[i].tempo=secondi; r[i].tmax=secondi; r[i].tmedio=secondi; r[i].numAccessi++; } } /*----------------------------------------------------*/ /* Calcola la media ed il massimo */ void calcola(){ int i; for(i=0; i < NUMUTENTI; i++) if (r[i].numAccessi>0) r[i].tmedio=r[i].tempo/r[i].numAccessi; } /* restituisce la struttura */ struct linea getInfo(int i) {return r[i];}
Struct linea r[NUMUTENTI];
che relazione intercorre con questa:
r[i].tempo; ???
Inoltre dà errore su
struct linea t;
....
Be', la dichiarazione crea un array di NUMUTENTI (dai commenti suppongo quindi 10) strutture linea chiamato r; r[i].tempo = -1 invece assegna al campo tempo dell'i+1-esimo elemento dell'array r il valore -1.Originariamente inviato da maurymg
Data questa dichiarazione:
struct linea r[NUMUTENTI];
che relazione intercorre con questa:
r[i].tempo; ???
Che errore dà? Puoi postare il contenuto di dichiarazioni.h?Inoltre dà errore su
struct linea t;
Amaro C++, il gusto pieno dell'undefined behavior.
Salve ragazzi se avete 5 minuti di tempo potreste dare un'occhiata a questo programma??
L'esame è dopodomani e dopo ieri pensavo di avere capito le strutture,ma a quanto pare non è così..
Ho preso ad esempio un programma diviso in file,ma non ho usato la divisione in file..l'ho fatto un pò lungo,poi in caso lo accorcio,è per capire come funziona.evidentemente sbaglio qualcosa,ma non capisco cosa..
Ecco il programma:
Inoltre quando per stampare uso:codice:#include<stdio.h> #include<ctype.h> #include<stdlib.h> #define NUMUT 10 struct profile{ char nomeutente[100]; //int tmedio[100]; //int tmax[100]; int accessi; }; struct profile utenti[NUMUT]; int getline(char[],FILE *); int sonouguali(char [],char []); struct profile getInfo(int); main(int argc,char *argv[]) { struct profile str; FILE *fin; fin=fopen(argv[1],"r"); int i,trovato,t; //inizializza for(i=0; i<NUMUT; i++) { utenti[i].accessi=0; } char line[100]; int len; char nomeUtente[100],d[100]; int tempo; //prende l'input while(len=getline(line,fin)>0) { sscanf(line,"%s %s %s %s %s %d",nomeUtente,d,d,d,d,&tempo); //carica la struttura for(i=0; i<NUMUT; i++) if((t=sonouguali(utenti[i].nomeutente,nomeUtente))==1) { trovato=1; utenti[i].accessi++; } if(!trovato) { for(i=0;utenti[i].accessi!=0;i++); strcpy(utenti[i].nomeutente,nomeUtente); utenti[i].accessi++; } } //stampa la struttura for(i=0;i<NUMUT;i++) { str=getInfo(i); if(str.accessi!=0) printf("Utente:%s\nAccessi:%d\n\n",str.nomeutente,str.accessi); } printf("premi un tasto.."); fclose(fin); getch(); } int sonouguali(char s[],char t[]) { int i; while(s[i]==t[i++]) if(s[i-1]=='\0' && t[i-1]=='\0') return 1; return 0; } int getline(char s[], FILE *f) { int c, i; for (i=0;(c=getc(f)) != EOF && c != '\n'; i++) s[i]=c; if (c=='\n') { s[i]=c; ++i; } s[i]='\0'; return i; } struct profile getInfo(int i) { return utenti[i]; }
avendo dichiarato:codice:for(i=0;i<NUMUT;i++) { str=getInfo(i); if(str.accessi!=0) printf("Utente:%s\nAccessi:%d\n\n",str.nomeutente,str.accessi); }
codice:struct profile str;
è necessaria questa dicitura?
L'ho usata prendendo a modello quella del programma originario..
non posso usare ad esempio:
Grazie HEEEEEELP..codice:for(i=0;utenti[i].accessi!=0;i++) printf("NOME UTENTE: %s\nACCESSI: %d\n\n",utenti[i].nomeutente,utenti[i].accessi);
Non puoi proporre un listato e dire "dateci un'occhiata" ... ma per fare cosa? Ci sono degli errori di compilazione? A run time? Risultati sbagliati o che non ti aspettavi?
Questo e' un forum tecnico ... si pongono domande precise, non e' il doposcuola di informatica ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
Non si può pretendere di imparare un linguaggio da un forum, il consiglio è ripassare le lezioni in cui venivano spiegate le strutture.
Quanto ai tuoi dubbi specifici sugli esempi da te postati il discorso è semplice, le strutture sono dichiarate in qualche header (i file .h) che tu non hai postato. Qui hai postato solo il codice che usa le struct, infatti trovi solo le dichiarazioni delle variabili.
...
compila ma non stampa niente..
il programma dovrebbe stampare una serie di strutture del tipo:
nome utente:
accessi:
Io pensavo che :le strutture sono dichiarate in qualche header (i file .h) che tu non hai postato. Qui hai postato solo il codice che usa le struct..
messo prima del main fosse una dichiarazione di struttura....struct profile{
char nomeutente[100];
//int tmedio[100];
//int tmax[100];
int accessi;
};
il codice postato è diverso da quello di prima,qui ho provato a fare un programma con le strutture,in un unico file,senza suddivisione..
non è così che avrei dovuto fare?
non capisco xke le strutture non vengano stampate..
Potrebbe dipendere dal contenuto del file (sei sicuro che contenga i dati che ti aspetti nell'ordine in cui te li aspetti?) ... Mostra un esempio del contenuto del file che leggi ...
No MP tecnici (non rispondo nemmeno!), usa il forum.