Programma c++, problema con vettori di stringhe

di Anonimizzato23359 il
9 risposte
Salve, ho un problema con un programma in c++.
Devo creare un vettore di stringhe(e fin qui ci sono) ed assegnare dei cognomi(che soddisfino una determinata condizione) contenenti in un vettore di strutture.
Il problema è quando assegno al vettore stringhe il cognome, perchè dice: assegnazione non valida.
grazie.

9 Risposte

  • Senza vedere il codice come si fa a vedere dove sbagli? Non credi?
  • .
  • oregon ha scritto:


    Senza vedere il codice come si fa a vedere dove sbagli? Non credi?
    questo è il pezzo di codice dove sbaglio :
    (va bene solo questo o devo metterlo tutto?)

    For(i=0;i<riemp;i++){
    somma=somma+v.numero; ( v è il vettore di strutture che contiene il cognome e il numero di esami)
    k++;
    }
    media=somma/k;

    for(i=0;i<riemp;i++){
    if(v.numero<media) (cerco il numero di esami minori della media e devo assegnarli ad un vettore di stringhe)
    v.studenti=v.cognome; ( e qui sbaglio ma non capisco come devo fare)
  • Le assegnazioni di stringhe si fanno con le funzioni, ad esempio la strcpy

    Mostra le strutture comunque perché c'è qualcosa che non quadra.

    Perché usi v.studenti ??
  • oregon ha scritto:


    Le assegnazioni di stringhe si fanno con le funzioni, ad esempio la strcpy

    Mostra le strutture comunque perché c'è qualcosa che non quadra.

    Perché usi v.studenti ??


    Ho inserito la funzione strcpy, per copiare una stringa nell'altra. Ho usato studenti per indicare il vettore di stringhe.
    ho cambiato delle cose nel programma ma compare questo messaggio di errore: "/home/p19280/.vpl_launcher.sh: line 12: 53362 Segmentation fault (core dumped) ./vpl_execution"
    Questo è il programma diviso in moduli

    const int DIM=20;
    typedef char stringa[DIM];
    
    struct studenti{
    	stringa cogn;
    	int num;
    	float media;
    };
    typedef char stringa[DIM];
    typedef stringa vett[DIM];
    typedef studenti vett_str[DIM];
    
    
    void leggi(const char*, int&, vett_str);
    void trova(vett_str,int,vett,stringa, int&);
    void stampa(vett, int, vett_str);
    
    #include<iostream>
    #include"lib.h"
    using namespace std;
    int main(){
    	vett studenti;
    	int riemp;
    	int riem;
    	char nomefile[]="part.txt";
    	vett_str v;
    	stringa s;
    	
    	
    	leggi(nomefile, riemp, v);
    	trova(v, riemp, studenti, s, riem);
    	stampa(studenti, riemp, v);
    	return 0;
    }
    #include<iostream>
    #include"lib.h"
    #include<fstream>
    #include<cstdlib>
    #include<sstream>
    #include<cstring>
    using namespace std;
    
    void leggi(const char* nomefile, int & riemp, vett_str v){
    	int i;
    	ifstream input;
    	input.open(nomefile);
    	if(input.fail())
    	exit(1);
    	while(!input.eof()){
    	input>>v[i].cogn;
    	input>>v[i].num;
    	input>>v[i].media;
    	i++;
    }
    riemp=i;
    input.close();
    }
    
    void trova(vett_str v, int riemp, vett studenti, stringa s, int& riem){
    	int i,j,k;
    	float media;
    	int somma;
    	for(i=0;i<riemp;i++){
    	somma=somma+v[i].num;
    	k++;
    }media=somma/k;	
    
    
    for(i=0;i<riemp;i++){
    if(v[i].num<media)
    strcpy(v[i].cogn,studenti[riem]);
    
    	
    }
    }
    void stampa(vett studenti, int riemp, vett_str v){
    	int i;
    	for(i=0;i<riemp;i++)
    	cout<<v[i].cogn<<" ";	
    }
  • Ma che è

    riem

    e quanto vale? Ha sempre lo stesso valore?
  • oregon ha scritto:


    Ma che è

    riem

    e quanto vale? Ha sempre lo stesso valore?
    ho chiamato il riempimento riem dato che riemp lo avevo già utilizzato per il vettore di strutture
  • Ma che senso ha? Deve avere un valore iniziale, quale? A che serve? Non cambia mai? Ragiona
  • oregon ha scritto:


    Ma che senso ha? Deve avere un valore iniziale, quale? A che serve? Non cambia mai? Ragiona

    un valore iniziale uguale a 0 ed incrementarlo ogni qual volta l'if viene rispettato, ho ragionato così.
    ma anche così il messaggio è lo stesso. Ho ragionato male mi sa.
Devi accedere o registrarti per scrivere nel forum
9 risposte