PDA

Visualizza la versione completa : [C++] Non mi stampa niente allocazione dinamica vettore


TheBlackWolf
18-07-2018, 08:48
Salve ho un problema devo prendere da file un vettore di numeri interi, allocarlo dinamicamente, eliminare dal mio vettore i numeri uguali a 0 poi selezionare i numeri dispari e quelli pari e inserirli in due file diversi, uno per i pari uno per i dispari. Successivamente conteggiare quanti numeri sono dispari e quanti sono pari e quanti zeri e quale dei due array abbia un maggior numero di elementi e quale quello minore

Però in tutto questo ho un problema con la stampa del mio array allocato dinamicamente preso da file non capisco perchè non mi stampi nulla.

Questo è il mio file:
0
3
15
0
0
7
8
0
9
0
11
44
21
0
0
0
0
0
0
0

Questa è la mia libreria :


#include <iostream>
#include <cstdlib>
#include <fstream>


#define n 50


using namespace std;






typedef char Stringa [n];


void carica_file(Stringa N, fstream &f, int *);
void carica_vettore(Stringa nome, fstream &, int *, const int);
void stampa(int *, const int);

Questa sono le mie funzioni:


#include "numeri.h"


void carica_file(Stringa nome, fstream &f, int *size){

int dim=0;
int vet[dim];

cout<<"Inserisci nome del file da caricare: ";
cin.getline(nome, n-1, '\n');
f.open(nome, ios::in);
if(!f){

cout<<"Eroore in fase di apertura del file \n";
exit(1);

}else{
while(!f.eof()){

f>>vet[dim];
dim++;

}

*size=dim;

}




}




void carica_vettore(Stringa nome, fstream &f, int *vet, const int d){

for(int i=0; i<d; i++){

f>>vet[i];

}




}


void stampa(int *v, const int dimensione){

cout<<"\n Stampo il vettore: \n";
for(int i=0; i<dimensione; i++){

cout<<v[i]<<" ";

}

}




Questo è il mio main:


#include "numeri.h"


int main(){

Stringa nome_file;
fstream file;
int dim;

carica_file(nome_file, file, &dim);

int *vettore= new int[dim];

carica_vettore(nome_file, file, vettore, dim);
stampa(vettore, dim);

}


Questo è quello che mi stampa la linetta non si arresta mai e non mi stampa niente.

29572

oregon
18-07-2018, 09:27
In carica_file, queste righe
int dim=0;
int vet[dim];

non hanno senso, prima di tutto perché un vettore di dimensioni zero non ha senso e in secondo luogo perché non servono.

Il contatore ce l'hai ed è size. Devi usare quello per contare.
E dato che stai solo contando, non ti serve alcun vettore ma un semplice intero

int tmp;

da usare solo per leggere il dato.

TheBlackWolf
18-07-2018, 15:22
In carica_file, queste righe
int dim=0;
int vet[dim];

non hanno senso, prima di tutto perché un vettore di dimensioni zero non ha senso e in secondo luogo perché non servono.

Il contatore ce l'hai ed è size. Devi usare quello per contare.
E dato che stai solo contando, non ti serve alcun vettore ma un semplice intero

int tmp;

da usare solo per leggere il dato.

Scusa l'ignoranza ma se lo facessi non mi darebbe però il numeri degli elementi presente? f gli darebbe solo primo numero

oregon
18-07-2018, 19:04
Perché dici questo? La lettura del file avviene per tutti gli elementi, per contarli ti serve solo size.

Hai provato?

Loading