2017-10-04 1 views
-2

Essayer d'obtenir trois tableaux différents de types différents à imprimer pour séparer les fichiers texte à l'aide d'un modèle.Envoi de différents types de tableaux à différents fichiers de texte à l'aide d'un modèle C++

Voici ce que j'ai:

template <class T> 
void givetxt(T *a, const int n) 
{ 
    ifstream infile("C:\\.txt", ios::in | ios::app); 
    for (int i = 0; i<n; i++) 
    { 
     infile >> a[i]; 
    } 
    infile.close(); 
} 

template <class T> 
void savetxt(const T *a, const int n) 
{ 
    ofstream outfile("C:\\.txt", ios::out | ios::app); 
    for (int i = 0; i<n; i++) 
     outfile << a[i] << endl; 
    outfile.close(); 
} 

int main() 
{ 
    const int n1 = 5, n2 = 7, n3 = 6; 
    int a[n1]; 
    float b[n2]; 
    char c[n3]; 

givetxt(a, n1); 
savetxt(a, n1); 

givetxt(b, n2); 
savetxt(b, n2); 

givetxt(c, n3); 
savetxt(c, n3); 

en ce moment, il envoie toutes les données du tableau au txt. Idéalement, je serai en mesure de l'imprimer à .inttxt, .floattxt et .chartxt. Je ne suis pas sûr de savoir comment ajuster le fichier infile/outfile pour permettre des fichiers texte séparés pour les autres tableaux. J'ai essayé des pointeurs mais le modèle ne me permettrait pas de rapporter T a* ni const int n aux variables que j'ai dans main. une poussée dans la bonne direction serait très appréciée.

+1

Que diriez-vous d'écrire 3 fonctions de surcharge 'savetxt (int *, int)', 'savetxt (float *, int)' et 'savetxt (char *, int)' et faites-les appeler votre fonction de template avec le 3ème paramètre - le nom de fichier 'void savetxt (T * a, const int n, const car * sFileName)'? –

+0

Génial merci pour votre aide, c'est ce qui a fini par travailler pour moi. 'void savetxt (T * a, const int n, const car * nomFichier) { \t fichier sortant (sFileName, ios :: out | ios :: app); \t pour (int i = 0; i

+0

bien le code de puits ne sort pas si grand dans les commentaires, mais cela fonctionne parfaitement, merci pour votre temps. –

Répondre

0

Dans cette situation, les fonctions surchargées (comme indiqué être Artemy Vysotsky dans les commentaires) seraient les meilleures.

Par exemple:

template<typename T> 
void savetxt(T *a, const int n, const char* sFilename) 
{ 
    ofstream outfile(sFilename, ios::out|ios::app); 
    // remaining code to save the file 
    ... 
    ... 
    ... 
} 
void savetxt(int *a, const int n) 
{ 
    savetxt(a, n, "c:\\inttxt.txt"); 
} 
void savetxt(float *a, const int n) 
{ 
    savetxt(a, n, "c:\\floattxt.txt"); 
} 
void savetxt(char *a, const int n) 
{ 
    savetxt(a, n, "c:\\inttxt.txt"); 
} 
+0

@ Jarod42 J'ai mis à jour le poste pour exclure inutiles –