Ultima modifica:
Salve a tutti! Mi dispiace presentarmi e subito pubblicare un mio problema, spero non ve la prendiate. Comunque quel che sto cercando di fare è:
Gestire l'archivio di una biblioteca (di massimo 100 libri) i cui libri libri siano identificati da titolo, autore, prezzo e disponibilità (quindi se in prestito o meno). Il programma deve permettere:
Non so come assegnare alla variabile 'codice', presente nell'array di struct, un valore che sia diverso per ogni libro, nei miei tentativi riscontro spesso l'errore "assignment to expression with array type". Come faccio?
So che magari non sono riuscito a spiegarmi al meglio, ditemi almeno cosa non va (a parte altre cose come puts o gets che so che dovrei evitare, ma per ora voglio solo che funzioni e poi correggo tutto nei minimi dettagli).
Grazie in anticipo a tutti, chiarisco che non cerco qualcuno che lavori al posto mio, ma qualche consiglio per proseguire. Piuttosto mi auguro che il programma sia leggibile, è il progetto più "grande" a cui ho lavorato fin ora, quindi mi rendo conto che sia un po' disordinato.
Gestire l'archivio di una biblioteca (di massimo 100 libri) i cui libri libri siano identificati da titolo, autore, prezzo e disponibilità (quindi se in prestito o meno). Il programma deve permettere:
- -di inserire un libro (a cui venga assegnato automaticamente un codice di riconoscimento).
- -cercare un libro tramite codice
- -cercare il libro più costoso.
Non so come assegnare alla variabile 'codice', presente nell'array di struct, un valore che sia diverso per ogni libro, nei miei tentativi riscontro spesso l'errore "assignment to expression with array type". Come faccio?
So che magari non sono riuscito a spiegarmi al meglio, ditemi almeno cosa non va (a parte altre cose come puts o gets che so che dovrei evitare, ma per ora voglio solo che funzioni e poi correggo tutto nei minimi dettagli).
Grazie in anticipo a tutti, chiarisco che non cerco qualcuno che lavori al posto mio, ma qualche consiglio per proseguire. Piuttosto mi auguro che il programma sia leggibile, è il progetto più "grande" a cui ho lavorato fin ora, quindi mi rendo conto che sia un po' disordinato.
C:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
typedef struct{
char titolo[40];
char autore[20];
int prezzo;
int codice;
int stato; //disponibilità, quindi se il libro è in prestito o meno
}lib;
int L=100;
int m=0;
int confronta(const void* a, const void* b){
lib* sa = (lib*)a;
lib* sb = (lib*)b;
return (strcmp(sa->titolo,sb->titolo));
}
int main(){
lib v[100];
int t;
char buffer[40];
int i=0;
int j=0;
int codice;
while(1){
puts("Specificare un'operazione");
puts("1- Aggiungi un nuovo libro");
puts("2- Ricerca per codice");
puts("3- Stampa l'archivio");
puts("4- Cerca libro più costoso")
puts("0- Esci dal programma");
scanf("%d\n",&t);
switch(t){
case 0:
return 0;
case 1:
for(;i<L;i++)
{
printf("Inserisci il titolo: ");
fflush(stdin);
fgets(v[i].titolo, sizeof(v[i].titolo), stdin);
printf("Inserisci l'autore: ");
fflush(stdin);
fgets(v[i].autore, sizeof(v[i].autore), stdin);
printf("Inserisci il prezzo: ");
fflush(stdin);
fgets(v[i].prezzo, sizeof(v[i].prezzo), stdin);
fflush(stdin);
printf("Inserisci il stato (1 o 0): "); /*per lo stato dovrei ancora inserire finire, con un if magari, ma ci penso dopo*/
fflush(stdin);
fgets(v[i].stato, sizeof(v[i].stato), stdin);
fflush(stdin);
/*qui è dove ho il mio problema*/
v[i].codice = ++;
fflush(stdin);
printf("Il codice del libro e': %d", v[i].codice);
puts("Aggiungere un altro libro?");
scanf("%1s",buffer);
fflush(stdin);
if((buffer[0]=='n')||(buffer[0]=='N'))
{
i++;
break;
}
}
continue;
case 2:
puts("Inserisci il codice da cercare");
scanf("%d",codice);
for (j=0;j<L;j++){
if(strstr((v+j)->codice,codice)){
puts("Corrispondenza trovata");
printf("%s\n %s\n",v[j].titolo, v[j].codice);
}
}
continue;
case 3:
qsort(v,i,sizeof(lib),confronta);
for(j=0;j<i;j++){
printf("%s %s\n",v[j].titolo, v[j].codice);
}
continue;
default:
puts("Errore di input. Riprova");
continue;
}
}
return 0;
}