|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | ||
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
[C]Problema assurdo e inaspettato nel stampare una stringa
Ciao ragazzi, allora ho fatto questo semplice programmino in C usando struct, puntatori e funzioni, per esercitarmi. Il programm richiede i'inseirmento di 4 struct libri manualmente, che hanno alcune propietà, e di vedere quale di questi costa di più e poi stampare il nome del libro.
Bene, funziona tutto (come andrete a notare nel programma ho anche stampato una variabile temproanea max per vedere se il risultato era giusto) ma non mi stampa il titolo del libro che costa di più. Potete vedere perchè? inizialmente il costo era in float, poi pensavo che ci fosse qualche errore nella comparazione, dato che non so perchè quando inserivo il float mi aggiungeva sempre un numero casuale dopo tutti gli 0, e fare un cast del float a sole 2 cifre decimali mi dava un errore. Comuqnue ecco il codice :
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
||
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
quando fai la scanf con %s, nella variabile del 2° argomento di scanf non devi mettere la &
es: char *string scanf("%s", string) e non scanf("%s", &string)
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
Comunque ora provo e ti faccio sapere EDIT : scusa ma senza & il programma smette di funzionare..uso DEVCPP
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one Ultima modifica di The-Revenge : 09-12-2009 alle 20:15. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Non ne sono sicuro ma credo che & abbia la precedenza su ->. In tal caso bisogna rivedere tutte le scanf:
Codice:
//funzione che richiedere l'inserimento dei valori dei 4 libri
void inserimento_libro(struct libro *a,int b){
printf("\nInserisci titolo libro %d : ",b);
scanf("%s",a->titolo);
printf("\nInserisci autore libro %d : ",b);
scanf("%s",a->autore);
printf("\nInserisci editore libro %d : ",b);
scanf("%s",a->editore);
printf("\nInserisci anno di edizione libro %d : ",b);
scanf("%d",&(a->anno));
printf("\nInserisci codice ISBN libro %d : ",b);
scanf("%d",&(a->ISBN));
printf("\nInserisci prezzo %d libro : ",b);
scanf("%d",&(a->prezzo));
printf("\n\n");
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Ho provato il programma, il problema è che non hai allocato lo spazio per le stringhe della struttura libro. Se ne hai la possibilità dichiarerei la dimensione in modo statico, così ti risparmi un sacco di noie con l'allocazione/deallocazione
edit: quindi ad esempio: Codice:
struct libro {
char titolo[40];
char autore[40];
char editore[40];
int anno;
int ISBN;
int prezzo;
};
Ultima modifica di wingman87 : 09-12-2009 alle 20:26. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
Io in un esercizio rpecedente ho dichirato col puntatore ed è andato tutto bene, è forse perchè poi ho inserito manualmente la frase?
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Quando dichiari il puntatore dichiari lo spazio per contenere l'indirizzo di un'area di memoria ma non allochi questa memoria.
Quando invece specifichi la dimensione dichiari un puntatore contenente l'indirizzo di un'area di memoria della dimensione specificata. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
Codice:
char *titolo Codice:
titolo = (char *) calloc(n, sizeof(char)) Prima di utilizzarla verifica che titolo sia != NULL (vedi la documentazione sulla calloc) Alla fine ricordati di liberare tale zona di memoria allocata: Codice:
free(titolo) Codice:
char titolo[40]
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:33.



















