2010-09-08 7 views
2

J'ai eu ce problème vraiment bizarre, j'écris mes résultats dans un fichier de sortie, j'utilise les fonctions AB et C je les active dans cet ordre, les résultats dans le fichier sont imprimés dans un ordre différent, d'abord de A que de C et ensuite de B. Je n'arrive pas à comprendre pourquoi les résultats sont imprimés dans un ordre différent de celui de l'ordre d'activation. merci.Correction d'un bug bizarre d'écriture dans un fichier en C++

le code:

void Manager::AddCommand(Command* com, ofstream &ResultFile) 
{ 
    if (com != NULL) 
    { 
     if (com->ValidCommand(ResultFile) == true) 
      commands.push_back(com); 
     else 
       delete com; 
    } 
} 

bool Command::ValidCommand(ofstream &Result) const 
{ 
    if(func<PrintCityCouncilList || func >HireEmployee){ 
     Result << "Command:Failed activating function - invalid function number\n"; 
     return false;} 
    if ((func == Command::PrintDepartmentEmployees) || (func == Command::PrintDepartmentExpenses) || (func == Command::PrintDepartmentStatistics)){ 
     if(dept<Employee::Engineering ||dept>Employee::Sanitation) 
     { 
      Result << "Command:Failed activating function - invalid department number\n"; 
      return false; 
     } 
    } 
    return true; 
} 

void Manager::ActivateCommand(Command* com, ofstream &Result) 
{ 
    if(com != NULL) 
    { 
     switch(com->GetFunction()) 
     { 
      case (Command::PrintCityCouncilList): pcc->PrintCityCouncilDetails(Result); 
       break; 
      case (Command::PrintDepartmentEmployees):ActivatePrintDeprtEmployees(com->GetDepartment(), Result); 
       break; 
      case (Command::PrintEmployeeSalary):ActivateEmployeeSalary(com->GetId(), Result); 
       break; 
      case (Command::PrintDepartmentExpenses):ActivateDeprtExpenses(com->GetDepartment(), Result); 
       break; 
      case (Command::PrintCityCouncilExpenses): pcc->AllExpenses (Result); 
       break; 
      case (Command::PrintDepartmentStatistics):ActivateDeprtStatistics(com->GetDepartment(), Result); 
       break; 
      case (Command::FireEmployee): pcc->RemoveEmployeeFromCC(NULL,com->GetId(),Result); 
       break; 
      case (Command::HireEmployee): pcc->AddEmployeeToCC(com->GetId(),com->GetPrivateName(),com->GetSurName(),com->GetDate(),com->GetAddress(),com->GetDepartment(), com->GetStatus(),com->GetSalary(),com->GetPositionPercent(),com->GetPhoneNum(), Result); 
       break; 
      default:Result<<"Manager:Failed Activating command - invalid function"<<endl; 
       break; 
     } 

    } 
} 

void Manager::ActivateCommandsList(ofstream &Result) 
{ 
    Command* tmp = NULL; 
    if (commands.empty() == false) 
    { 
     list<Command*>::iterator iter = commands.begin(); 
     while (iter != commands.end()) 
     { 
      tmp = (Command*)(*iter); 
      ActivateCommand(tmp,Result); 
      iter++; 
     } 
    } 
} 
+1

S'il vous plaît envoyez le code que nous ne sommes pas des médiums – Iznogood

+1

pouvez-vous nous montrer le code? Sinon, je vais devoir utiliser les pouvoirs de ma boule de cristal pour vous dire ce qui n'a pas fonctionné. Mais ... je vous le dis, c'est sacrément bon à ces choses! – wheaties

+0

Pouvez-vous également nous montrer comment ces fonctions sont appelées et quelle est la sortie que vous obtenez. –

Répondre

0

Je pense que si c'est des devoirs, vous n'êtes pas avoir un problème de filetage. Avez-vous essayé de vider le flux de sortie de A, B et C? Cela pourrait résoudre votre problème.

+0

Cela peut provoquer un retard, mais cela ne devrait pas entraîner la réorganisation de la sortie. –

1

Ok, voici l'affaire, votre code peut-être avoir quelques difficultés si vous l'exécutez dans Visual stdio. Vous voyez, il a quelques bugs quand il essaie d'optimiser votre code. Désactivez l'optimisation. En outre rincer votre flux, qui est fait lors de la mise endl dans et Cout \ n dans printf. Il y a une autre possibilité et c'est Stack-Corruption ou Heap-Corruption. Vérifiez si vos objets dynamiques sont référencés dans leurs limites. Tant que vous n'envoyez pas le code, comme mon ami vient de le dire, nous devrions consulter la boule de cristal.