Problema con programma in C

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

Problema con programma in C

Messaggiodi makuto il 07 set 2010, 14:53

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;
}
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

 

Re: Problema con programma in C

Messaggiodi thrantir il 07 set 2010, 16:05

ho inserito il codice nell'apposito tag [code] cosi' risulta piu' leggibile, e ho levato il bold, che non era funzionale al messaggio
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: Problema con programma in C

Messaggiodi thrantir il 07 set 2010, 16:28

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
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: Problema con programma in C

Messaggiodi `knives` il 07 set 2010, 17:18

quando alla scanf [scanf("%1s", &risp);]passi il formato della variabile, se è un char usa "%c" che è fatto apposta.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Problema con programma in C

Messaggiodi makuto il 07 set 2010, 17:35

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.
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

Re: Problema con programma in C

Messaggiodi `knives` il 07 set 2010, 18:25

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..
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Problema con programma in C

Messaggiodi makuto il 07 set 2010, 18:37

in che senso passare solo la struct? Mi puoi fare un esempio? Grazie!
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

Re: Problema con programma in C

Messaggiodi `knives` il 07 set 2010, 18:47

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..
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Problema con programma in C

Messaggiodi makuto il 08 set 2010, 19:39

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.
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

Re: Problema con programma in C

Messaggiodi `knives` il 08 set 2010, 21:05

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
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Problema con programma in C

Messaggiodi makuto il 08 set 2010, 22:33

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);
}

"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

Re: Problema con programma in C

Messaggiodi Carlito Brigante il 11 set 2010, 09:48

Che "non va" cosa significa ?
Non conpila, non gira, ti da seg fault o cos'altro ?
"Non posso portarti con me in questo viaggio. Me ne sto andando, lo sento... Ultimo giro di bevute, il bar sta chiudendo, il sole se ne va... Dove andiamo per colazione?! Non troppo lontano... Che nottata... Sono stanco, amore... Stanco..."
Avatar utente
Carlito Brigante
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 347
Iscritto il: 30 mag 2004, 00:41
Località: Montignoso

Re: Problema con programma in C

Messaggiodi makuto il 11 set 2010, 10:10

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
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

Re: Problema con programma in C

Messaggiodi Carlito Brigante il 11 set 2010, 11:51

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.
"Non posso portarti con me in questo viaggio. Me ne sto andando, lo sento... Ultimo giro di bevute, il bar sta chiudendo, il sole se ne va... Dove andiamo per colazione?! Non troppo lontano... Che nottata... Sono stanco, amore... Stanco..."
Avatar utente
Carlito Brigante
Saggio del pianeta
Saggio del pianeta
 
Messaggi: 347
Iscritto il: 30 mag 2004, 00:41
Località: Montignoso

Re: Problema con programma in C

Messaggiodi makuto il 11 set 2010, 12:13

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.
"Che fortuna possedere una grande intelligenza, non ti mancano mai le sciocchezze da dire!"
makuto
Cittadino verde
Cittadino verde
 
Messaggi: 19
Iscritto il: 07 set 2010, 14:48

 
Prossimo

Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron