PROBLEMA CON scanf di una array di caratteri

di il
4 risposte

PROBLEMA CON scanf di una array di caratteri

Il mio programma dovrebbe permettermi di inserire un nuovo titolo (di libro) all'interno di un file di testo - se premo 1-, altrimenti -se premo 2- dovrebbe farmi visualizzare tutte le stringhe (titoli di libri) all'interno del file di testo.
Nel caso in cui scelgo l'opzione 1, ho dei problemi nel memorizzare in una array di caratteri la stringa titolo del libro.
Inoltre, per spiegare interamente il programma (anche se non ho dei problemi con quest'ultima parte), dopo aver conservato la stringa titolo nella array di caratteri, dovrà chiedermi in quale categoria porre il libro.

 
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main() {

char titolo[MAX];
char parlare;
int categoria;
int ambiente=0;
int opzione;
int i=0;
int t=0;
FILE *e;

printf("1)INSERIRE UN NUOVO TITOLO NEL CATALOGO \n2)VISUALIZZARE CATALOGO PERSONALE \n ");
printf("Scegli una delle due opzioni");
scanf("%d",&ambiente);


if(ambiente==1)
{


printf ("INSERISCI TITOLO: ");

do{
scanf("%c ", &titolo[i]);
i++;
} while(titolo[i] > 10);

printf("\n\n1)Epica \n2)Libri Sacri \n3)Giallo \n4)Storico \n5)Filosofia \n6)Strategia \n7)Satira \n8)Horror \n9)Gotico \n10)Poesia \n11)Fiabe, favole e romanzi fantastici \n12)Fantasy \n13)Fantascienza \n14)Avventura \n15)Biografie, saggi, cronache \n\n");

do
    {
    printf("DIGITA NUMERO DELLA CATEGORIA: ");
    scanf("%d\n\n", &categoria);

    if(categoria>15)
    {
    system("CLS");
    printf("IL TITOLO DEL LIBRO INSERITO E': ");
    do
        {
        printf("%c ",titolo[t]);
        t++;
        } while(titolo[t] > 10);

        printf("\n\n");
        printf("\n1)Epica \n2)Libri Sacri \n3)Giallo \n4)Storico \n5)Filosofia \n6)Strategia \n7)Satira \n8)Horror \n9)Gotico \n10)Poesia \n11)Fiabe, favole e romanzi fantastici \n12)Fantasy \n13)Fantascienza \n14)Avventura \n15)Biografie, saggi, cronache \n\n");
        printf("DI NUOVO ");
        }



        } while(categoria>15);

        printf("E' ANDATA BENE!");


        }

        return 0;
        }

   

4 Risposte

  • Re: PROBLEMA CON scanf di una array di caratteri

    "ho dei problemi" ti sembra chiaro?
  • Re: PROBLEMA CON scanf di una array di caratteri

    oregon ha scritto:


    "ho dei problemi" ti sembra chiaro?
    Ciao scusami, è vero, forse non si capisce molto da come l'ho scritto... lo scrivo meglio, semplificando, in modo che potrai vedere più facilmente quale sia il problema.
    In pratica il programma chiede all'utente tramite printf di premere 1.
    Se l'utente preme 1, il programma chiede di inserire il titolo di un libro (che conserva tramite l'array di caratteri titolo.
    Tramite il puntatore e, apro il file di testo EPICA.txt e inserisco in coda (a+) utilizzando la funzione fprintf, la stringa (titolo del libro) contenuta nell'array di caratteri titolo.
    Infine prima di chiudere il file di testo tramite funzione fclose(e), sullo schermo deve apparire la scritta "Fatto!", che mi assicuri che il titolo è stato inserito correttamente nel file di testo EPICA.txt.
    Il problema è che, avviando il programma, tutto procede bene... infatti mi chiede di scrivere 1 - ed io lo faccio -; mi chiede di inserire il titolo - ed io lo faccio -; ed infine mi scrive ricevo su schermo anche la scritta "Fatto!".
    Però andando poi ad aprire il file EPICA.txt, noto che non è stata inserita alcuna stringa... c'è soltanto un a capo e uno spazio.

    Sarei grato a chiunque mi possa aiutare, perchè non riesco proprio a capire dove stia l'errore... grazie mille in anticipo

    
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 100
    
    int main() {
    
    char titolo[MAX];
    char parlare;
    int categoria;
    int ambiente=0;
    int opzione;
    int i=0;
    int t=0;
    FILE *e;
    
    printf("Premi 1: ");
    scanf("%d",&ambiente);
    
    
    if(ambiente==1)
    {
    
    
    printf ("\n\nINSERISCI TITOLO: ");
    
    do{
    scanf("%c ", &titolo[i]);
    } while(titolo[i++] > 10);
    
    e= fopen ("C:\\Users\\NB03\\Desktop\\PROGRAMMAZIONE\\C\\CATALOGO\\categorie\\EPICA.txt","a+");
    
         do
         {
         fprintf (e, "%c ",titolo[t]);
         } while(titolo[t++] > 10);
    
     printf ("Fatto!");
      fclose(e);
    
    
            }
    
            return 0;
            }
    
    
    
  • Re: PROBLEMA CON scanf di una array di caratteri

    Ma che sono quei do while? Eliminali.

    L'input del numero deve essere scritto così per eliminare l'invio finale

    scanf("%d%*c", &ambiente);

    l'input del titolo va fatto così

    scanf("%[^\n]s", titolo);

    e la scrittura su file così

    fprintf(e, "%s", titolo);
  • Re: PROBLEMA CON scanf di una array di caratteri

    oregon ha scritto:


    Ma che sono quei do while? Eliminali.

    L'input del numero deve essere scritto così per eliminare l'invio finale

    scanf("%d%*c", &ambiente);

    l'input del titolo va fatto così

    scanf("%[^\n]s", titolo);

    e la scrittura su file così

    fprintf(e, "%s", titolo);

    Grazie mille Oregon, cercavo di risolvere il problema da un giorno intero, e grazie a te l'ho risolto finalmente. Grazie ancora
Devi accedere o registrarti per scrivere nel forum
4 risposte