Il problema era il buffer, ho corretto il sitema di input scelta precedente, ora i doppi gets() non servono più, ma non credo fossero un errore, semmai un sistema per pulire il buffer.
Ricorda che è il terzo giorno che traffico con il C, le mie risposte non sono autorevoli.
#include <stdio.h> /* lista libbrerie incluse */
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define SIZE 50 /* lunghezza nome titolo autore libri */
#define LEN 0 /* preprocessore per avviare array */
struct libro{ /* struttura libbreria*/
char titolo[SIZE];
char autore[SIZE];
char genere[SIZE];
};
FILE *fptr; /* puntatore salvataggio file */
int a=0; /* variabile numero di libri */
int i; /* variabile per il ciclo for */
int y; /* variabile confronto libri */
int flag=0; /* variabile libri trovati */
struct libro arr_lib[LEN]; /* array libri*/
void titolo(); /* lista funzioni per far funzionare programma*/
void aggiungi_libri();
void visualizza();
void cerca_libro();
void cerca_titolo();
void cerca_autore();
void cerca_genere();
void togli_libro();
int main()
{
char scelta;
while(scelta != '5'){
system("cls");
titolo();
scelta = getch();
switch(scelta){
case '1':
visualizza();
break;
case '2':
aggiungi_libri();
break;
case '3':
cerca_libro();
break;
case '4':
togli_libro();
break;
}
}
return 0;
}
void cerca_genere(){
system("cls");
char confronto[SIZE];
char trovato_t[SIZE];
char trovato_a[SIZE];
char trovato_g[SIZE];
printf("================================================================\n");
printf(" RICERCA GENERE \n");
printf("================================================================\n\n");
printf("Inserisci il Genere: ");
gets(confronto);
for(i=0;i<a;i++){
y=strcmp(confronto,arr_lib[i].genere);
if(y == 0){
strcpy(trovato_t,arr_lib[i].titolo);
strcpy(trovato_a,arr_lib[i].autore);
strcpy(trovato_g,arr_lib[i].genere);
printf("Genere: %20s Titolo: %20s Autore: %20s\n",trovato_g,trovato_t,trovato_a);
flag=1;
}
}
if(flag == 0){
printf("\nNessun risultato trovato\n");
}
printf("\nPremi un tasto per continuare..");
getch();
}
void cerca_autore(){
system("cls");
char confronto[SIZE];
char trovato_t[SIZE];
char trovato_a[SIZE];
char trovato_g[SIZE];
printf("================================================================\n");
printf(" RICERCA AUTORE \n");
printf("================================================================\n\n");
printf("Inserisci il Autore: ");
gets(confronto);
for(i=0;i<a;i++){
y=strcmp(confronto,arr_lib[i].autore);
if(y == 0){
strcpy(trovato_t,arr_lib[i].titolo);
strcpy(trovato_a,arr_lib[i].autore);
strcpy(trovato_g,arr_lib[i].genere);
printf("Autore: %20s Titolo: %20s Genere: %20s\n",trovato_a,trovato_t,trovato_g);
flag=1;
}
}
if(flag == 0){
printf("\nNessun risultato trovato\n");
}
printf("\nPremi un tasto per continuare..");
getch();
}
void titolo(){
printf("================================================================\n");
printf(" ARCHIVIO \n");
printf("================================================================\n\n");
printf("1. Libreria\n");
printf("2. Aggiungi libro\n");
printf("3. Cerca libro\n");
printf("4. Togli libro\n");
printf("5. Esci\n");
}
void aggiungi_libri(){
system("cls");
printf("================================================================\n");
printf(" AGGIUNGI LIBRI \n");
printf("================================================================\n\n");
printf("Inserisci Titolo: ");
gets(arr_lib[a].titolo);
printf("Inserisci Autore: ");
gets(arr_lib[a].autore);
printf("Inserisci Genere: ");
gets(arr_lib[a].genere);
++a;
}
void visualizza(){
system("cls");
printf("================================================================\n");
printf("%20s %20s %20s\n","TITOLO","AUTORE","GENERE");
printf("================================================================\n\n");
for(i=0;i<a;i++){
printf("%20s %20s %20s\n",arr_lib[i].titolo,arr_lib[i].autore,arr_lib[i].genere);
}
printf("\nSono presenti in archivio %d libri\n",a);
printf("Premi un tasto per continuare..");
getch();
}
void cerca_libro(){
system("cls");
char scelta;
printf("================================================================\n");
printf(" RICERCA LIBRO \n");
printf("================================================================\n\n");
printf("1. Cerca per Titolo\n2. Cerca per Autore\n3. Cerca per genere\n4. Esci\n");
scelta = getch();
switch(scelta){
case '1':
cerca_titolo();
break;
case '2':
cerca_autore();
break;
case '3':
cerca_genere();
break;
case '4':
break;
}
}
void cerca_titolo(){
system("cls");
char confronto[SIZE];
char trovato_t[SIZE];
char trovato_a[SIZE];
char trovato_g[SIZE];
printf("================================================================\n");
printf(" RICERCA TITOLO \n");
printf("================================================================\n\n");
printf("Inserisci il Titolo: ");
gets(confronto);
for(i=0;i<a;i++){
y=strcmp(confronto,arr_lib[i].titolo);
if(y == 0){
strcpy(trovato_t,arr_lib[i].titolo);
strcpy(trovato_a,arr_lib[i].autore);
strcpy(trovato_g,arr_lib[i].genere);
flag=1;
}
}
if(flag == 1){
system("cls");
printf("================================================================\n");
printf("%20s %20s %20s\n","TITOLO","AUTORE","GENERE");
printf("================================================================\n\n");
printf("\nTitolo: %s Autore: %s Genere: %s\n",trovato_t,trovato_a,trovato_g);
}
else{
printf("\nNessun risultato trovato\n");
}
printf("\nPremi un tasto per continuare..");
getch();
}
void togli_libro(){
system("cls");
int k,flag2=0;
char confronto[SIZE];
printf("================================================================\n");
printf(" ELIMINA LIBRO \n");
printf("================================================================\n\n");
printf("Inserisci Titolo: ");
gets(confronto);
for(i=0;i<a;i++){
y=strcmp(confronto,arr_lib[i].titolo);
if( y == 0){
for(k=i;k<a-1;k++){
strcpy(arr_lib[k].titolo,arr_lib[k+1].titolo);
strcpy(arr_lib[k].autore,arr_lib[k+1].autore);
strcpy(arr_lib[k].genere,arr_lib[k+1].genere);
}
printf("\nEliminato!");
flag2 = 1;
--a;
}
}
if(flag2 == 0){
printf("\nNessun libro trovato!");
}
printf("\nPremi un tasto per continuare..");
getch();
}