Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [C++] Il mio programma salta un istruzione

    Salve a tutti sto facendo un semplice programma devo creare un array di struct in cui devo inserire degli elementi e stamparlo cercando di creare funzioni e librerie quanto più sintetiche possibile.

    La struct è composta da una stringa (descrizione) che deve essere allocata dinamicamente e un valore intero (chiave).

    Il problema e che mi sono bloccato a questo punto non mi da nessun errore e non riesco a capire perchè non mi faccia inserire la stringa.

    Questa è la mia libreria per la gestione degli elementi della Struct:

    codice:
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    #define N 100
    
    
    struct Element{
        
        char *info;
        int key;
        
    };
    
    
    typedef char String [N];
    
    
    void read_element(Element &);
    void write_element(Element &);
    Queste sono le mie funzioni per la gestione degli elementi:

    codice:
    #include "Struct_lib.h"
    
    void read_element(Element &E){
        
        E.info=0;
        E.key=0;
        
    }
    
    
    void write_element(Element &ele){
    
    
            String name;
            
            cout<<"\n Iserisci la descrizione dell'elemento :";
            cin.getline(name, N-1, '\n');
            ele.info=new char (strlen(name+1));
            strcpy(ele.info, name);
            cout<<"\n Iserisci la chiave dell'elemento :";
            cin>>ele.key;
            
    }
    Questa è la mia libreria per la gestione degli elementi dell'array di struct:

    codice:
    #include "Struct_lib.h"
    
    #define L_DIM 100
    
    
    typedef Element E;
    typedef E List[L_DIM];
    
    
    void read_list(List &, int );
    Questa è sono le mie funzioni per la gestione degli elementi della struct:

    codice:
    #include "VettStruct_lib.h"
    
    void read_list(List &L, int size){
        
        cout<<" Inserisci il numero degli elementi della lista: ";
        cin>>size;
        for(int i=0; i<size; i++){
            
            read_element(L[i]);
            write_element(L[i]);
            
        }    
    }
    QUESTO E' IL MIO MAIN:

    codice:
    #include "VettStruct_lib.h"
    
    
    int main(){
        
        List Mylist;
        Element MyElement;
        int List_size;
        
        read_list(Mylist, List_size);
        
    }
    Questo è quello che mi stampa:

    Immagine.png

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    In questa linea quel +1 non è nel posto giusto

    ele.info=new char (strlen(name+1));

    Correggi.

    Dopo ogni cin scrivi

    cin.ignore();

    per svuotare il buffer;

    Nella funzione read_list l'ultimo parametro non ha senso perché non lo usi (non passi un valore dal main) ma lo chiedi all'interno, basta una variabile locale.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    In questa linea quel +1 non è nel posto giusto

    ele.info=new char (strlen(name+1));

    Correggi.

    Dopo ogni cin scrivi

    cin.ignore();

    per svuotare il buffer;

    Nella funzione read_list l'ultimo parametro non ha senso perché non lo usi (non passi un valore dal main) ma lo chiedi all'interno, basta una variabile locale.
    Hai ragione ho fatto un errore stupidissimo grazie mille l'ultimo parametro intendi write_list? Mi serve per inserire le stringhe e il numero. Oppure intendi altro?
    Ultima modifica di TheBlackWolf; 28-07-2018 a 10:21

  4. #4
    Ora mi salta tutte le istruzioni tranne la prima, ho anche fatto un delete dell'area hip che avevo inizializzato a 0 però ora mi fa inserire la prima stringa ma mi salta tutte le altre istruzioni, come mai? Altri consigli?

    Questo è l'unico cambiamento che ho fatto

    Libreria di funzioni per la gestione degli elementi della struct:

    codice:
    #include "Struct_lib.h"
    
    void read_element(Element &E){
        
        E.info=0;
        E.key=0;
        
    }
    
    
    void write_element(Element &ele){
    
    
            String name;
            
            cout<<"\n Iserisci la descrizione dell'elemento :";
            cin.getline(name, N-1, '\n');
            if(ele.info) delete[] ele.info;
            ele.info=new char [strlen(name)+1];
            strcpy(ele.info, name);
            cin.ignore();
            cout<<"\n Iserisci la chiave dell'elemento :";
            cin>>ele.key;
            
    }

    Questo è quello che mi stampa:


    1.png
    Ultima modifica di TheBlackWolf; 28-07-2018 a 10:26

  5. #5
    Ho capito qual'è il problema se inserisco più di un carattere all'interno della mia stringa allocata dinamicamente mi salta tutte le istruzioni? Cos'è che sbaglio nell'allocazione della stringa?

    1.png

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non hai seguito il consiglio. Dopo

    cin>>ele.key;

    non mi pare che hai inserito la cin.ignore();
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non hai seguito il consiglio. Dopo

    cin>>ele.key;

    non mi pare che hai inserito la cin.ignore();
    Si si infatti perciò ho fatto altre domande ero sicuro che stavo sbagliando qualcosa, hai ragione era quello il problema grazie mille

  8. #8
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non hai seguito il consiglio. Dopo

    cin>>ele.key;

    non mi pare che hai inserito la cin.ignore();
    Oregon sai per caso dirmi perchè mi salta le istruzioni nel for per la stampa degli elementi dell'array di struct all'interno della funzione write_element?

    main:
    codice:
    #include "VettStruct_lib.h"
    
    int main(){
        
        List Mylist;
        Element MyElement;
        int List_size;
        
        read_list(Mylist, List_size);
        write_list(Mylist, List_size);
        
    }
    funzioni gestione array di struct

    codice:
    #include "VettStruct_lib.h"
    
    
    void read_list(List &L, int size){
        
        cout<<" Inserisci il numero degli elementi della lista: ";
        cin>>size;
        for(int i=0; i<size; i++){
            read_element(L[i]);
            create_element(L[i]);
        }    
    
    
    }
    
    
    void write_list(List &L,const int size){
            
        cout<<"Stampo gli elementi della lista : \n";
        for(int i=0; i<size; i++){
            cout<<(i+1)<<") ";
            write_element(L[i]);
            
        }
        
    }

    libreria per la gestione :

    codice:
    #include "Struct_lib.h"
    
    
    #define L_DIM 100
    
    
    typedef Element E;
    typedef E List[L_DIM];
    
    
    void read_list(List &, int );
    void write_list(List &,const int );

    Funzioni gestione elementi struct:

    codice:
    #include "Struct_lib.h"
    
    void read_element(Element &E){
        
        E.info=0;
        E.key=0;
        
    }
    
    
    void create_element(Element &E){
    
    
            String name;
            
            cout<<"\n Iserisci la chiave dell'elemento :";
            cin>>E.key;
            cin.ignore();
            cout<<"\n Iserisci la descrizione dell'elemento :";
            cin.getline(name, N-1, '\n');
            if(E.info) delete[] E.info;
            E.info=new char [strlen(name)+1];
            strcpy(E.info, name);
            cin.ignore();
            
    }
    
    
    void write_element(Element &E){
        
        cout<<E.info<<"  "<<E.key<<endl;
        
    }
    Libreria gestioni elementi struct:

    codice:
    #include <iostream>#include <cstring>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    #define N 100
    
    
    struct Element{
        
        char *info;
        int key;
        
    };
    
    
    typedef char String [N];
    
    
    void read_element(Element &);
    void create_element(Element &);
    void write_element(Element &);


    Questo è quello che mi stampa:

    2.png

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Manca la cin.ignore() dopo la cin>>size

    Elimina la cin.ignore() dopo la cin.getline

    La funzione read_list deve accettare il parametro size per riferimento

    void read_list(List &L, int &size)

    Nel main devi passare il valore size

    int size;


    read_list(Mylist, size);
    write_list(Mylist, size);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Manca la cin.ignore() dopo la cin>>size

    Elimina la cin.ignore() dopo la cin.getline

    La funzione read_list deve accettare il parametro size per riferimento

    void read_list(List &L, int &size)

    Nel main devi passare il valore size

    int size;


    read_list(Mylist, size);
    write_list(Mylist, size);
    Gli passavo int size come int List_size in size era l'alias che usavo all'interno delle funzioni, comunque grazio mi scordo sempre di svuotare il buffer, comunque non so con che cosa sbaglio ma mi da errori.

    main:
    codice:
    #include "VettStruct_lib.h"
    
    int main(){
        
        List Mylist;
        Element MyElement;
        int size;
        
        read_list(Mylist, size);
        write_list(Mylist, size);
        
    }
    funzioni array struct:

    codice:
    #include "VettStruct_lib.h"
    
    void read_list(List &L, int &size){
        
        cout<<" Inserisci il numero degli elementi della lista: ";
        cin>>size;
        cin.ignore();
        for(int i=0; i<size; i++){
            read_element(L[i]);
            create_element(L[i]);
        }    
    
    
    }
    
    
    void write_list(List &L,const int size){
            
        cout<<"Stampo gli elementi della lista : \n";
        for(int i=0; i<size; i++){
            cout<<(i+1)<<") ";
            write_element(L[i]);
            
        }
        
    }
    Libreria array struct:

    codice:
    #include "Struct_lib.h"
    
    #define L_DIM 100
    
    
    typedef Element E;
    typedef E List[L_DIM];
    
    
    void read_list(List &, int &);
    void write_list(List &,const int );
    Funzioni elementi struct:

    codice:
    #include "Struct_lib.h"
    
    void read_element(Element &E){
        
        E.info=0;
        E.key=0;
        
    }
    
    
    void create_element(Element &E){
    
    
            String name;
            
            cout<<"\n Iserisci la chiave dell'elemento :";
            cin>>E.key;
            cin.ignore();
            cout<<"\n Iserisci la descrizione dell'elemento :";
            cin.getline(name, N-1, '\n');
            if(E.info) delete[] E.info;
            E.info=new char [strlen(name)+1];
            strcpy(E.info, name);
            
    }
    
    
    void write_element(Element &E){
        
        cout<<E.info<<"  "<<E.key<<endl;
        
    }

    Libreria elementi struct:

    codice:
    #include <iostream>#include <cstring>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    #define N 100
    
    
    struct Element{
        
        char *info;
        int key;
        
    };
    
    
    typedef char String [N];
    
    
    void read_element(Element &);
    void create_element(Element &);
    void write_element(Element &);

    Questi sono gli errori:

    Immagine.jpg
    Ultima modifica di TheBlackWolf; 28-07-2018 a 18:51

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 © 2024 vBulletin Solutions, Inc. All rights reserved.