Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c++]PROVLEMA CON CLASSE

    Salve a tutti, premetto k sono alle prime armi ma devo fare un esame fra poki gg. in programamzione ma acnoar nn ho capito bene alcune cose sulle stringhe, infatti ho creato una classe ESAME ma nn riesco a mettere da input il nome dell esame nell oggetto!!
    Vi posto i codice k ho scritto usando come ide Eclipse.
    Esame.h

    #ifndef ESAME_H_
    #define ESAME_H_
    #include <iostream>

    typedef char* STRING;

    class Esame{
    private:
    int voto,cfu;
    STRING nome;
    public:
    Esame();
    void inserisciNome(STRING);
    void inserisciVoto(int );
    void inserisciCfu(int);
    int getVoto()const;
    int getCfu()const;
    STRING getNome(STRING)const;

    void stampaTutto();

    };

    #endif /* ESAME_H_ */

    Esame.cpp


    #include "Esame.h"
    #include <iostream>
    using namespace std;

    Esame::Esame(){
    voto=0;
    cfu=0;
    nome=0;
    }

    void Esame::inserisciVoto(int voto1){ voto=voto1 ; }

    void Esame::inserisciCfu(int cfu1){ cfu=cfu1;}
    void Esame::setNome(STRING nome1){ nome=nome1;}

    int Esame::getVoto()const{ return voto;}

    int Esame::getCfu()const{ return cfu;}
    STRING Esame::getNome()const{ return nome;}

    void Esame::stampaTutto(){
    cout<<"il voto è: "<<voto<<" il cfu è : "<<cfu<<endl;
    }

    Test.cpp

    #include<iostream>
    #include "Esame.h"
    #include<string>
    using namespace std;

    int main (){
    Esame e;
    STRING nome;


    cout<<"\n inserisci nome: "<<endl;
    cin.getline(nome,20);
    e.getNome(nome);

    return 0;
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Innanzitutto, ti suggerisco di leggere il Regolamento per conoscere tutte le norme da seguire per la partecipazione a quest'area del forum.

    Ad esempio, occorre evitare i titoli tutti in MAIUSCOLO, e le abbreviazioni tipiche da SMS, cercando di esprimersi al meglio in modo che gli utenti non debbano rinunciare alla propria sanità mentale per poter comprendere l'enunciazione del problema.

    Il codice sorgente, inoltre, va inserito nel tag [CODE] per formattarlo correttamente ed essere leggibile.

    Ho fatto io le modifiche opportune qui. In futuro, provvedi tu.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Grazie dell'aiuto.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Questa:
    codice:
    typedef char* STRING;
    non è una ASCIIZ string: è un petardo che scoppia in mano.
    Non cavillo troppo sul resto, ma prima impari a usare std::string e prima non ripeterai questi errori.

    Questa
    codice:
    #define LEN 32
    char nome_esame[LEN];
    è una ASCIIZ String.

    codice:
    class Esame{
        private:
        int voto,cfu;
       char nome[LEN];
    public:
       Esame();
       void inserisciNome(const char* n, int len);
       void inserisciVoto(int );
       void inserisciCfu(int);
       int getVoto()const;
       int getCfu()const;
       const char* getNome(STRING)const;
       void stampaTutto();
    };
    
    Esame::Esame(){
       voto=0;
       cfu=0;
       nome=0; // o memset(nome,0,LEN);
    }
    
    void Esame::inserisciVoto(int voto1){ voto=voto1 ; }
    
    void Esame::inserisciCfu(int cfu1){ cfu=cfu1;}
    void Esame::inserisciNome(const char* nm, int len) { 
        strncpy(nome,nm,len);    
    }
    
    int Esame::getVoto()const{ return voto;}
    
    int Esame::getCfu()const{ return cfu;}
    const char*Esame::getNome()const{ return nome;}
    
    void Esame::stampaTutto(){
    cout<<"il voto è: "<<voto<<" il cfu è : "<<cfu<<endl;
    }
    
    int main (){
        Esame e;
        char nome[LEN];
    
    
    cout<<"\n inserisci nome: "<<endl;
    cin.getline(nome,len);
    e.inserisciNome(nome,LEN);
    cout << e.getNome() << endl;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Grazie ora lo provo..

  6. #6
    L'ho provato, funziona, ma nn sono riuscito a far funzionare
    codice:
    #define LEN 32;
    ho scritto cosi:
    codice:
     const int LEN=32;
    Poi volevo chiedere la lunghezza chiamata len nel metodo della classe ()inserisciNome()
    dovrebbe essere data da input quando si digita il nome, come posso fare??
    Io ho risolto mettendo sempre LEN.
    codice:
    #include<iostream> 
    #include "Esame.h" 
    #include<string.h> 
    using namespace std;  
    
    void inserisciNome(Esame& );  
    
    int main (){ 	
    Esame e;     
    
    inserisciNome(e);     	
    
    return 0;
     } 
    
    void inserisciNome(Esame&e){ 	
         cout<<"\nInserisci nome :"; 		
         char nome[LEN]; 		
         cin.getline(nome,LEN); 		
         e.inserisciNome(nome,LEN); 
    }

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da iguanaaa
    L'ho provato, funziona, ma nn sono riuscito a far funzionare
    Affermazione alquanto "strana" (ricorda le "convergenze parallele" di andreottiana memoria )

    codice:
    #define LEN 32;
    ho scritto cosi:
    codice:
     const int LEN=32;
    é lo stesso. Il primo è più C, il secondo più C++. Non cambia niente.
    Poi volevo chiedere la lunghezza chiamata len nel metodo della classe ()inserisciNome()
    dovrebbe essere data da input quando si digita il nome, come posso fare??
    Al di la del come, la domanda è: perché? (Sempre che io abbia capito le tue intenzione, se no ignora).
    Richiedere un valore in ingresso ha un senso se devi riempire un array o una matrice di cui non conosci a priori la dimensione. Richiedere in ingresso la dimensione con: "inserisci il numero di lettere di cui è composto il tuo esame", a me lascia perplesso.

    (Tra l'altro ho scritto male:
    const char* getNome(STRING)const;
    che dev'essere:
    const char* getNome()const;
    ma spero l'abbia corretta tu).

    Comunque se LEN è acquisita da input, dovrai usare l'allocazione dinamica, puntatori e modificare la classe di conseguenza.

    Altrimenti (come scritto sopra) inizi a usare std::string e tutti questi problemi te li scordi.
    (Sempre che sia ammessa al tuo esame, ovviamente).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  8. #8
    Sisi avevo gia corretto il metodo, grazie per la risposta su len, comunque non so neanche io se posso usare string.

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.