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<<" ";
}