2014-09-10 6 views
0

Je suis extrêmement novice en C++ (c'est en fait le premier programme sur lequel j'ai travaillé) et je dois l'apprendre à mesure que j'écris ce programme. Je suis coincé. Le programme est censé lire dans un fichier texte, le charger dans un tableau et assigner un caractère à chaque nombre dans le tableau (donc pour cela je pense que je vais créer 2 tableaux, un tableau int avec les nombres lus dans le fichier, et un tableau char avec les caractères assignés aux nombres). Il imprimera ensuite ces deux tableaux. Il est alors supposé passer par le tableau int initial et rechercher des nombres dont les valeurs diffèrent de leurs valeurs voisines de plus d'un, si une telle valeur est trouvée, il est supposé donner au nombre la valeur de la moyenne de ses valeurs voisines. Il est supposé effectuer toutes ces corrections, puis affecter des caractères à ces nombres corrigés et imprimer les deux tableaux. Je ne sais pas vraiment comment faire tout cela, mais je vais essayer de réduire ma question à mon problème initial. Je n'ai aucune idée comment charger le tableau à partir du fichier. Mon manuel semble faire un bon travail de couverture des tableaux et des fichiers, mais il ne les rassemble pas vraiment et parle de construire des tableaux à partir de fichiers.Chargement d'éléments d'un fichier dans un tableau 2D en C++

Voici à quoi ressemble le fichier, le premier nombre est la taille du tableau.

10 
7 6 9 4 5 4 3 2 1 0 
6 5 5 5 6 5 4 3 2 1 
6 5 6 6 7 6 8 4 3 2 
1 5 6 7 7 7 6 5 4 3 
5 5 6 7 6 7 7 6 5 9 
5 6 7 6 5 6 6 5 4 3 
5 6 7 9 5 5 6 5 4 3 
5 5 6 7 6 6 7 6 5 4 
5 9 5 6 7 6 5 0 3 2 
5 5 5 5 6 5 4 3 2 7 

Et voici ce code que j'ai jusqu'à présent, bien que la grande majorité de celui-ci traite d'ouvrir le fichier. Je suppose qu'il fait au moins correctement, car lorsque je l'exécute, je ne reçois pas le message "Impossible d'ouvrir l'erreur de fichier".

#include <iostream> 
#include <fstream> 
#include <array> 

int main() { // Main will be in prog1_test 
    //Open file 
    ifstream prog1File("prog1.dat", ios::in); 

    //If file can't be opened, exit 
    if (!prog1File) { 
     cerr << "File could not be opened" << end; 
     exit(EXIT_FAILURE); 
    } 
     int size; 
     int numArray[][]; 
} 

Alors que j'ai la taille et les variables tableau déclaré, je ne sais pas si cela est fait correctement, comme je l'ai dit que je suis encore très nouveau à cela. Je connais quelques bases de Java, mais j'ai du mal à comprendre comment les choses se transforment en C++. Toutes les suggestions sont grandement appréciées.

+0

ofstream est utilisé pour ouvrir les fichiers pour l'écriture, ne devrait pas vous utiliser un ifstream au lieu si vous wan't à lire de lui? – Bedford

+0

Ah ok, je vais corriger cela. Comme je l'ai dit, j'apprends comme je vais :-) –

+0

Aussi en C++ cela ne fonctionne pas: int numArray [] []; Cela fonctionne en Java, mais vous ne pouvez pas utiliser un tableau dynamique comme ça en C/C++. Vous devez soit spécifier la taille exacte lorsque vous le déclarez, soit utiliser un pointeur. – Bedford

Répondre

2

Je n'ai pas vraiment eu le problème du trou. Je suppose que vous avez des problèmes avec la création d'un tableau 2D et la lecture à partir du fichier. Donc, est ici un code qui montre comment il peut être fait de mon point de vue:

#include <iostream> 
#include <fstream> 
#include <vector> 


int main() { // Main will be in prog1_test 
    //Open file 
    ifstream prog1File("prog1.dat"); 

    //If file can't be opened, exit 
    if (!prog1File) { 
     cerr << "File could not be opened" << end; 
     exit(EXIT_FAILURE); 
    } 
    int size; 

    prog1File >> size; 

    int[][] matrix = new int[size][]; 
    for (int i = 0; i < size; ++i) 
    { 
     matrix[i] = new int[size]; 
     for (int j = 0; j < size; ++j) 
     { 
      prog1File >> matrix[i][j]; 
     } 
    } 

    /* do your stuff */ 

    for (int i = 0; i < size; ++i) 
    { 
     delete matrix[i]; 
    } 
    delete matrix; 

    return 0; 
} 
+0

Ah ok, très utile. Notre professeur n'arrête pas de dire que le fait de savoir que Java va nous aider à apprendre ces autres langues, mais dans ce cas, il semble que ce soit me tracasser plus que tout haha. –

+0

Puisque j'utilise un tableau plutôt qu'un vecteur, est-ce que je remplacerais simplement vector avec array? Aussi, quel est le but de la matrice? Désolé, ce ne sont que quelques choses que je ne connais pas encore. –

+0

Oui, bien sûr, cela fonctionnera bien. La seule chose à laquelle vous devriez vous intéresser est une initialisation correcte puisque vous n'avez pas de garbage collector en C++ =) Vous pouvez essayer comme ceci: int [] [] matrix = new int [size] []; pour (int i = 0; i antonpp

3

Il suffit de remplacer ofstream avec ifstream et ios :: avec ios :: dans

#include <iostream> 
#include <fstream> 
#include <array> 

int main() { // Main will be in prog1_test 
    //Open file 
    ifstream prog1File("prog1.dat", ios::in); 

    //If file can't be opened, exit 
    if (!prog1File) { 
     cerr << "File could not be opened" << end; 
     exit(EXIT_FAILURE); 
    } 
     int size; 
     int numArray[][]; 
} 

ofstream est pour l'écriture et non la lecture du fichier et ios :: out est le mode de sortie ouverte et non entrée en mode ouvert.

J'espère que cela aide.

+0

Certainement utile, mais ayant encore du mal à trouver comment charger la matrice à partir de ce fichier. Surtout avec comment assigner ce premier nombre à ma variable de taille int. Je sais que dans Java ce serait quelque chose comme int size = fin.nextInt(), mais je ne suis pas sûr de ce qu'il serait en C++? –

+0

savez-vous comment utiliser cin en C++ utilisez prog1File de la même manière. prog1File >> taille; –

+0

Non, je n'ai pas encore rencontré cela, j'ai littéralement traversé ce programme en pensant, "ok, j'ai besoin d'ouvrir le fichier" puis je cherche comment ouvrir un fichier, etc haha. –