Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    142

    [C++]Visualizzazione stringhe con struct

    ragazzi ho un piccolo problema acquisendo tramite stringhe con le struct i libri di una bibblioteca e poi rivisualizzare i libri inseriti ed infine visualizzare i libri che per titolo contengo la parola informatica....ecco il codice:
    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    
    using namespace std;
    
      typedef char Tstring50[51];
      typedef char Tstring30[31];
      typedef char vuoto[1];
    
      struct bibblioteca{
        Tstring50 titolo;
        Tstring30 autore;
        float     prezzo;
        Tstring50 isbn;
        int       annopubblicazione;
        Tstring50 editore;
      };
      typedef bibblioteca Tlibri[100];
    
    int main()
    {  
      bibblioteca Tlibri;
      int N,scelta,I;
      vuoto a;
      do{
        cout<<"Libri da inserire: ";
        cin>>N;
        cin.getline(a,1);
      }while((N<1)||(N>100));
      for(I=0;I<N;I++){
        cout<<endl;      
        cout<<I+1<<char(248)<<" libro"<<endl;
        cout<<endl;                    
        cout<<"Titolo: ";
        cin.getline(Tlibri.titolo,51);
        cout<<"Autore: ";
        cin.getline(Tlibri.autore,31);
        cout<<"Prezzo: ";
        cin>>Tlibri.prezzo;
        cin.getline(a,1);
        cout<<"ISBN: ";
        cin.getline(Tlibri.isbn,51);
        cout<<"Anno pubblicazione: ";
        cin>>Tlibri.annopubblicazione;
        cin.getline(a,1);
        cout<<"Editore: ";
        cin.getline(Tlibri.editore,51);  
      }   
      cout<<endl;
      cout<<"----------Riepilogo---------- "<<endl;
      cout<<endl;
      for(I=0;I<N;I++){
        cout<<endl;      
        cout<<I+1<<char(248)<<"libro"<<endl;
        cout<<endl;                      
        cout<<"Titolo: "<<Tlibri.titolo<<endl;
        cout<<"Autore: "<<Tlibri.autore<<endl;
        cout<<"Prezzo: "<<Tlibri.prezzo<<endl;
        cout<<"ISBN: "<<Tlibri.isbn<<endl;
        cout<<"Anno pubblicazione: "<<Tlibri.annopubblicazione<<endl;
        cout<<"Editore: "<<Tlibri.editore<<endl;             
      }  
      cout<<endl;
      cout<<"Premere un tasto per vedere i libri conetenenti nel titolo la parola informatica (1).SI  (2).NO: ";
      cin>>scelta;
      for(I=0;I<N;I++){  
        if(scelta == 1){
          system("cls");        
          if((strstr(Tlibri.titolo,"informatica"))||(strstr(Tlibri.titolo,"Informatica"))||(strstr(Tlibri.titolo,"INFORMATICA"))){
            cout<<endl;                                                                                                                      
            cout<<"I libri che contengono la parola informatica nel titolo sono:"<<endl;
            cout<<endl;
            cout<<I+1<<char(248)<<"libro"<<endl;
            cout<<endl;
            cout<<"Titolo: "<<Tlibri.titolo<<endl;
            cout<<"Autore: "<<Tlibri.autore<<endl;
            cout<<"Prezzo: "<<Tlibri.prezzo<<endl;
            cout<<"ISBN: "<<Tlibri.isbn<<endl;
            cout<<"Anno pubblicazione: "<<Tlibri.annopubblicazione<<endl;
            cout<<"Editore: "<<Tlibri.editore<<endl;
          } 
          else{
            cout<<"Nessun libro contenente informatica come titolo"<<endl;
          }
        }
      }
      
      system("PAUSE");	
      return 0;
    }
    il problema è che mi visualizza nel riepilogo solo l ultimo libro inserito e mi mostra come libro contenente informatica nel titolo anche l ltimo libro inserito
    come posso risolvere??

  2. #2
    La definizione della variabile "Tlibri" in main "offusca" il tuo typedef: e' di tipo "bibblioteca" che al suo interno, per come hai definito la struttura "bibblioteca" contiene un solo libro.

    ps. "biblioteca" si scrive con due "b", non con tre.
    ;-)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [C++]Visualizzazione stringhe con struct

    Ma in realtà temo che il problema sia che ne ciclo for che utilizza per la lettura dei dati da tastiera non utilizza I come indice di spiazzamento per l'array, cioè scritture come

    codice:
       cin.getline(Tlibri.titolo,51);
        cout<<"Autore: ";
        cin.getline(Tlibri.autore,31);
        cout<<"Prezzo: ";
        cin>>Tlibri.prezzo;
        cin.getline(a,1);
        cout<<"ISBN: ";
        cin.getline(Tlibri.isbn,51);
    dovrebbero essere sostituite da

    codice:
        cin.getline(Tlibri[I].titolo,51);
        cout<<"Autore: ";
        cin.getline(Tlibri[I]..autore,31);
        cout<<"Prezzo: ";
        cin>>Tlibri[I]..prezzo;
        cin.getline(a,1);
        cout<<"ISBN: ";
        cin.getline(Tlibri[I]..isbn,51);
    se non usi l'indice di spiazzamento vai a sovrascrivere sempre il primo elemento dell'array. Inoltre devi fare la stessa cosa anche nel for per la stampa a video dell'array, altrimenti andrai a stampare sempre e solo la prima (che sarà poi l'ultimo libro inserito visto che appunto vai sempre a sovrascrivere durante l'immissione dei dati...)
    every day above ground is a good one

  4. #4

    Re: Re: [C++]Visualizzazione stringhe con struct

    Originariamente inviato da YuYevon
    Ma in realtà temo che il problema sia che ne ciclo for che utilizza per la lettura dei dati da tastiera non utilizza I come indice di spiazzamento per l'array
    per come l'ha definita lui, la variabile Tlibri definita in main non e' un array:
    Codice PHP:
    struct bibblioteca{
        
    Tstring50 titolo;
        
    Tstring30 autore;
        
    float     prezzo;
        
    Tstring50 isbn;
        
    int       annopubblicazione;
        
    Tstring50 editore;
      };
    ...
    int main()
    {  
      
    bibblioteca Tlibri// Tlibri e' di tipo bibblioteca 
    insomma un bel pastrocchio ;-)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: Re: Re: [C++]Visualizzazione stringhe con struct

    Originariamente inviato da MacApp
    per come l'ha definita lui, la variabile Tlibri definita in main non e' un array:
    Eh già hai proprio ragione... quella typedef ti fa confondere

    A questo punto direi proprio di eliminarla e di limitarsi a dichiarare in main() un array di tipo "biblioteca" (senza la doppia sud-like!) e poi utilizzare l'indice di spiazzamento come suggerivo... in fondo immagino che la sua intenzione fosse proprio quella di dichiarare un array
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.