Как добавить возвращенный результат функции в файл, который тоже пишется на C ++? - PullRequest
0 голосов
/ 31 марта 2020

Здравствуйте. В настоящее время я пишу программу, которая считывает данные в текстовом файле, выполняет вычисления и затем выводит результаты в выходной текстовый файл.

Это программа в полном

основном файле.

int main() {

readFile(inputFile1, inputFile2, inputFile3, lines);
robotComplexity(lines);
robotVariability(lines);
writeFile(outputFile, lines, robotComplexity(lines), robotVariability(lines));

getch();
return 0;

}

void Customer() {
std::string customerName;
std::string projectName;
std::string partNumber;;
}

void Parts() {

char partCode;
std::string partName;
int maximum;
int minimum;
int complexity;

}
void Builder() {

std:string name;
int ability;
int variability;

}

Файл имплантации

std::vector<std::string> lines;
std::string inputFile1 = "Builders.txt";
std::string inputFile2 = "Parts.txt";
std::string inputFile3 = "Customers.txt";
std::string outputFile = "output.txt";
std::string input;

void readFile(std::string const& inputFile1, std::string const& inputFile2, std::string const& inputFile3,
              std::vector<std::string>& lines) //function to read Builders, Customers and Parts text file
{
   std::ifstream file1(inputFile1);
   std::ifstream file2(inputFile2);
   std::ifstream file3(inputFile3);
   std::string line;

   while(std::getline(file1, line)) 
   {
      lines.push_back(line);
   }

     while(std::getline(file2, line)) 
   {
      lines.push_back(line);
   }

     while(std::getline(file3, line)) 
   {
      lines.push_back(line);
   }

}


double robotComplexity(std::vector<std::string>& lines) { //takes in the out.txt file

std::string output = lines[0]; //so far only reads the first line of the output file. 
std::string input = output.substr(18,1);

double complexity = 20 * atoi(input.c_str());


   if(complexity > 100) {
      complexity = 100;
   }

cout << "The Robot Complexity is: " << complexity << endl;
return complexity;
}

double robotVariability(std::vector<std::string>& lines) {

std::string output = lines[0]; //so far only reads the first line of the output file. 
std::string input = output.substr(15,2);

double variability;

variability = 5 + atoi(input.c_str());

cout << "The Robot Variability is: " << variability << endl;
return variability;

}

void writeFile(std::string const& outputFile,
               std::vector<std::string> const& lines, double unitComplexity, double unitVariability) //writes to a file output.txt the end calculations. 
{
   std::ofstream file(outputFile);
   for(std::string const& line: lines)
   {
      file << line << std::endl;
   }

   for(double x: unitComplexity) {
      file << x << std::endl;
   }


}

Код, на который я также хотел бы обратить внимание, это последние 3 функции в файле реализации, представляющие собой robotCompelxity, robotVariability и writeFile. Первые 2 функции из вычислений, основанных на файле, который был прочитан, и writeFile, к этому моменту времени содержат детали каждого робота, как видно в основном файле (IE, строитель, клиенты и детали). Эти работы и детали успешно выведен в файл.

Моя проблема заключается в функциях robotVariability и robotComplexity. Как видно в параметрах функций writeFile, in принимает строку const, которая является выходным файлом, список векторов, который представляет детали робота, и два двойных числа, которые являются результатами функций robotVariability и robotComplexity. Я попытался создать улучшенное для l oop добавление таких результатов в выходной файл, что видно в этой строке кода в конце

for(double x: unitComplexity) {
      file << x << std::endl;
   }

Однако это приводит к ошибке чтения, обозначенной для этого оператора for, основанного на диапазоне, требуется подходящая функция begin, и ни одна не была найдена. Я не уверен, как решить эту проблему.

Повторим, я просто пытаюсь добавить результаты как robotComplexity, так и robotVariability типа double, в файл, в который выполняется запись в функцию writeFile. Спасибо.

1 Ответ

1 голос
/ 31 марта 2020

Измените ваш код, чтобы вывести двойные числа без ранжирования для -l oop, как это

void writeFile(std::string const& outputFile,
               std::vector<std::string> const& lines, double unitComplexity, double unitVariability) //writes to a file output.txt the end calculations. 
{
   std::ofstream file(outputFile);
   for(std::string const& line: lines)
   {
      file << line << std::endl;
   }

   file << unitComplexity << std::endl;
   file << unitVariability << std::endl;
}

И функция запишет двойные в текстовый файл. Циклы for for-rangeing лучше всего подходят только для таких объектов, как векторы и массивы, а не для переменных с одним значением.

...