Pagina 1 di 2

Problema con programma in C

MessaggioInviato: 07 set 2010, 14:53
di makuto
Vi chiedo una grossa mano. Ho scritto questo programma, una volta compilato lo avvio e mi funziona fino al momento di fare la stampa nel main (mi inizia a stampare dei simboli strani e poi windows lo chiude). Ho messo degli "stampa" di prova nella funzione e vedo così che il vettore si carica correttamente. Cosa può essere a non andare? Succede qualcosa tra il passaggio del vettore dalla funzione al main secondo me...Grazie mille!

Codice: Seleziona tutto
#include<stdio.h>

typedef struct{
   char destinazione[21];
   char tipologia;
   float costo;
   int data;
}viaggio;
typedef viaggio viaggi[100];

int carica(viaggi v, int dim){
   char risp='s';
       while(risp=='s'){
      printf("IInserire destinazione: ");
      scanf("%s", v[dim].destinazione);
      printf("Inserire tipologia (A: all inclusive  H: Hotel  V: Viaggio): ");
      scanf("%1s", &v[dim].tipologia);
      printf("Inserire costo: ");
      scanf("%f", &v[dim].costo);
      printf("Inserisci data (gg/mm/aa): ");
      scanf("%d", &v[dim].data);
      printf("Inserire altro viaggio?(s/n): ");
      scanf("%1s", &risp);
       dim++;}

   return (dim);
}

void stampa(viaggi v, int dim){
   int i;
   for(i=0;i<dim;i++){
         printf("/n %s %c %f %d", v[i].destinazione, v[i].tipologia, v[i].costo, v[i].data);}
}

int main(){
   viaggi v;
   int dim=0, i;
   dim=carica(v, dim);
   stampa(v, dim);

   return 0;
}

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 16:05
di thrantir
ho inserito il codice nell'apposito tag [code] cosi' risulta piu' leggibile, e ho levato il bold, che non era funzionale al messaggio

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 16:28
di thrantir
un primo errore che vedo e' che non c'e' modo di accorgersi, dentro la funzione carica, se si va oltre la dimensione dell'array

altro errore la data non e' un int, sara' una stringa se dev'essere del formato gg/mm/yy

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 17:18
di `knives`
quando alla scanf [scanf("%1s", &risp);]passi il formato della variabile, se è un char usa "%c" che è fatto apposta.

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 17:35
di makuto
So che il %c è fatto apposta, ma da dei problemi con il \n dell'invio.
COmunque il problema dell'esercizio non è li, ma nella lettura delle celle del vettore, a quanto mi sembra.
Non legge quello che ci ho salvato prima.

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 18:25
di `knives`
secondo me, fai casino con il passaggio degli indirizzi degli array, ti conviene che quando vai a fare il caricamento gli passi solo la struct, cioè solo una casella del vettore, e il caricamento lo controlli a monte con un ciclo.
spero di esser stato chiaro..

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 18:37
di makuto
in che senso passare solo la struct? Mi puoi fare un esempio? Grazie!

Re: Problema con programma in C

MessaggioInviato: 07 set 2010, 18:47
di `knives`
ogni volta gli passi l'indirizzo e la posizione in viaggi,
invece se te nella chiamata fai carica(v[i]), poi nell'intestazione della funzione avrai carica(viaggio v)
cosi nel main, con un ciclo scandisci tutto il vettore viaggi, e ti fermi con sicurezza al 99.

anche perchè a rileggere bene il tuo listato ora te incrementi sempre dim, senza mai resettarlo tra la carica e la stampa..

Re: Problema con programma in C

MessaggioInviato: 08 set 2010, 19:39
di makuto
Incremento dim e lo tengo tale in quanto è l'indicatore che mi tiene aggiornato sulla dimensione del vettore.
Comunque passare il vettore con v[i] è sintatticamente sbagliato, infatti il compilatore mi da errore.
Inoltre:
Ho testato che sui mac il programma gira.
Ho provato su un altro computer windows e il programma non va.
Ho modificato un file vecchio scrivendoci il nuovo programma e sembra andare, quando però copio-incollo il testo e lo faccio eseguire da un altro compilatore (tipo lcc) non va più.
Indi per cui mi viene da pensare che non sia mio l'errore, ma che sia successo qualcosa alla macchina.

Re: Problema con programma in C

MessaggioInviato: 08 set 2010, 21:05
di `knives`
i nel tuo listato non è inizializato.. come pretedi che vada? il mio era un esempio..
significa che il compilatore su quella macchina ha qualche impostazione per cui va in crash

Re: Problema con programma in C

MessaggioInviato: 08 set 2010, 22:33
di makuto
Per esempio, ho appena scritto questo programma, non va. Cosa ho sbagliato?
Codice: Seleziona tutto
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct {
   char nome[51];
   char cognome[20];
   int eta;
} persona;
typedef persona persone[30];

int carica(persone p, int dimp){
   char risp='s';
   while(risp=='s' && dimp<30){
      printf("Nome: ");
      scanf("%s", p[dimp].nome);
      printf("Cognome: ");
      scanf("%s", p[dimp].cognome);
      printf("Eta: ");
      scanf("%d", &p[dimp].eta);
      dimp++;
      printf("Caricare altro?: ");
      scanf("%1s", &risp);
   }
   return dimp;
}

int main(){
   persone pers;
   int i, dim=0;
   dim=carica(pers, dim);
   printf("Hai caricato un totale di %d persone", dim);
   for(i=0;i<dim;i++){
      printf("\n\n %s", pers[i].nome);
      printf("\n %s", pers[i].cognome);
      printf("\n %d", pers[i].eta);
   }
   scanf("%d", &i);
}


Re: Problema con programma in C

MessaggioInviato: 11 set 2010, 09:48
di Carlito Brigante
Che "non va" cosa significa ?
Non conpila, non gira, ti da seg fault o cos'altro ?

Re: Problema con programma in C

MessaggioInviato: 11 set 2010, 10:10
di makuto
Inserisco x persone, nel momento in cui spingo "n" per uscire dal ciclo di acquisizione il programma comincia a stampare pagine e pagine di ZZZZ

Re: Problema con programma in C

MessaggioInviato: 11 set 2010, 11:51
di Carlito Brigante
Prova a "fissare" il ciclo di "acquisizione" dei dati fissando a 30 il numero degli utenti da memorizzare.
Quindi effettua la stampa per vedere se quei 30 te li stampa correttamente.
Potrebbe essere anche un problema relativo alla scanf.

Ad ogni modo il modo in cui hai definito la funzione "carica" e di coseguenza come effettui la chiamta non e- molto ortodosso.
Imho dovresti cominciare a fare uso di puntatori, sia per il passaggio di parametri sia per effettuare allocazione dinamica anziche' allocazione statica.

Re: Problema con programma in C

MessaggioInviato: 11 set 2010, 12:13
di makuto
Non mi va neanche se metto come limite 30.
Comunque, tutte quelle "stranezze" che vedete sono dovute al fatto che devo rispettare alcune consegne, come per esempio quella di utilizzare solo allocazione statica. Non capisco perchè non è molto ortodosso la definizione e la chiamata della funzione...
Lo scanf comunque non può essere perchè ho verificato, tramite uno stampa inserito nella funzione, che il vettore viene caricato normalmente.