2009-10-19 4 views
1

J'ai débogué mon programme et les tableaux semblent bien affectés. Cependant, pour une raison étrange et stupide, le code ne sort pas les tableaux dans le fichier.Pourquoi ce code ne sortira-t-il pas dans un fichier?

S'il vous plaît aidez-moi à repérer mon bug ou tel!

#include <iostream> 
#include <algorithm> 
#include <string> 
#include <fstream> 
using namespace std; 

void sRecSort(string *n, int *s, string *e, int len){ 
    for (int i = 0; i < len; i++){ 
     for (int j = i + 1; j < len; j++){ 
      if (s[j] < s[i]){ 
       swap(s[i],s[j]); 
       swap(e[i],e[j]); 
       swap(n[i],n[j]); 
      } 
     } 
    } 
} 

void printLowestRecord(char inFileName[]){ 
    string tempSubString = " "; 
    string names[12] = {" "}; 
    int grades[12] = {0}; 
    string emails[12] = {""}; 
    int firstSpace = -1; 
    int secondSpace = -1; 
    ifstream inputMe(inFileName); 
    while (!inputMe.eof()){ 
     for (int i = 0; i < 12; i++){ 
      getline(inputMe, tempSubString); 
      for (int w = 0; w < strlen(tempSubString.c_str()); w++){ 
       if (tempSubString[w] != ' '){ 
        continue; 
       } 
       else{ 
        if (firstSpace == -1){ 
         firstSpace = w; 
        } 
        else if (firstSpace != -1 && secondSpace == -1){ 
         secondSpace = w; 
         names[i] = tempSubString.substr(0, firstSpace); 
         grades[i] = atoi((tempSubString.substr(firstSpace + 1, secondSpace - (firstSpace + 1))).c_str()); 
         emails[i] = tempSubString.substr(secondSpace + 1, tempSubString.length() - (secondSpace + 1)); 
         break; 

        } 
       } 
      } 
      firstSpace = -1; 
      secondSpace = -1; 
     } 
    } 
    sRecSort(names, grades, emails, 12); 
    inputMe.close(); 
} 

void sortFileRecords(char inFileName[], char outFileName[]){ 
    ifstream inputFile(inFileName); 
    ofstream outputFile(outFileName); 
    string tempSubString = " "; 
    string names[12] = {" "}; 
    int grades[12] = {0}; 
    string emails[12] = {" "}; 
    int firstSpace = -1; 
    int secondSpace = -1; 
    while (!inputFile.eof()){ 
     for (int i = 0; i < 12; i++){ 
      getline(inputFile, tempSubString); 
      for (int w = 0; w < strlen(tempSubString.c_str()); w++){ 
       if (tempSubString[w] != ' '){ 
        continue; 
       } 
       else{ 
        if (firstSpace == -1){ 
         firstSpace = w; 
        } 
        else if (firstSpace != -1 && secondSpace == -1){ 
         secondSpace = w; 
         names[i] = tempSubString.substr(0, firstSpace); 
         grades[i] = atoi((tempSubString.substr(firstSpace + 1, secondSpace - (firstSpace + 1))).c_str()); 
         emails[i] = tempSubString.substr(secondSpace + 1, tempSubString.length() - (secondSpace + 1)); 
         break; 
        } 
       } 
      } 
      firstSpace = -1; 
      secondSpace = -1; 
     } 
    } 
    sRecSort(names, grades, emails, 12); 

    for (int q = 0; q < 12; q++){ 
     outputFile << names[q] << " " << grades[q] << " " << emails[q] << endl; 
    } 
    inputFile.close(); 
    outputFile.close(); 
} 

int main (int argc, char * const argv[]) { 
    printLowestRecord("gradebook.txt"); 
    sortFileRecords("gradebook.txt", "sortedGradebook.txt"); 
    return 0; 
} 

Voilà mes données:
Sean 80 [email protected]
James 100 [email protected]
Issac 99 [email protected]
Thomas 88 [email protected] edu
Alice 78 [email protected]
Jone 75 [email protected]
Zach 89 [email protected]
Mark 86 [email protected]mail.com
Nick 79 [email protected] om
Amy 95 [email protected]
Claire 89 [email protected]
Eve 97 [email protected]

+0

Anthony, s'il vous plaît donner votre fichier d'entrée de sorte qu'il peut être testé avec cela. @schnaader et moi-même avons confirmé que votre code fonctionne avec nos fichiers de test. – paxdiablo

+2

Oui, je le seconderais. Si vous ne pouvez pas donner le fichier de test original, veuillez au moins donner un exemple inventé qui échoue. – schnaader

+1

Les données d'entrée que vous avez données fonctionnent très bien pour moi (voir mon article). Voir aussi le commentaire sur ma réponse pour d'autres solutions possibles à votre problème. – schnaader

Répondre

3

Le code semble être correct jusqu'à présent, je pense que vos données de test sont erronées. Si je test avec ce fichier d'entrée:

a 10 c 
d 2 f 
g 9 i 
j 4 l 
m 8 o 
p 6 r 
s 7 u 
v 8 x 
y 6 a 
b 10 d 
e 5 g 
h 12 j 

Le fichier de sortie est comme celui-ci, ce qui est le comportement attendu:

d 2 f 
j 4 l 
e 5 g 
y 6 a 
p 6 r 
s 7 u 
m 8 o 
v 8 x 
g 9 i 
b 10 d 
a 10 c 
h 12 j 

Donc, soit vos données de test est mauvaise ou il y a une erreur supplémentaire que vous manipulation avoir à faire (le fichier ne peut pas être ouvert, etc.).

Par ailleurs, cette partie de votre code

      else if (firstSpace != -1 && secondSpace == -1){ 

peut être réduite à

      else { 

parce que vous avez une instruction break là-bas et régler secondSpace revenir à -1 juste après.

EDIT: Vos données fonctionne aussi bien - sortie est la suivante:

Jone 75 [email protected] 
Alice 78 ali[email protected] 
Nick 79 [email protected] 
Sean 80 [email protected] 
Mark 86 [email protected] 
Thomas 88 [email protected] 
Zach 89 [email protected] 
Claire 89 [email protected] 
Amy 95 [email protected] 
Eve 97 [email protected] 
Issac 99 [email protected] 
James 100 [email protected] 
+0

Oui, le code est bon, je l'ai vérifié avec des résultats similaires. Ergo le problème vous est un environnemental. Le fichier existe-t-il, existe-t-il là où votre programme s'exécute et est-il du bon format? – paxdiablo

+0

Il existe et il s'agit d'un fichier texte. –

+0

@Anthony, nous avons besoin de votre fichier d'entrée. – paxdiablo

0
printLowestRecord("gradebook.txt"); 
sortFileRecords("gradebook.txt", "sortedGradebook.txt"); 

Peut-être que vous devez spécifier le chemin absolu complet du fichier?

0
printLowestRecord("gradebook.txt"); 
sortFileRecords("gradebook.txt", "sortedGradebook.txt"); 

Dans ces deux lignes, essayez d'écrire le complet filepath pour le texte de sortie. Je pense que c'est le problème.

+0

Ce n'est pas ça, car le fichier "sortedGradebook.txt" montre simplement "Jone" et c'est tout. –

Questions connexes