C ++ для l oop только обработка окончательной записи списка векторов - PullRequest
0 голосов
/ 12 апреля 2020

В моей основной программе у меня есть функция, которая выглядит примерно так:

for(int i = 0; i < partsVector.size(); i++) {

if(newChar == "A") {

 cout << newChar <<  endl;
} else {
  cout << "Character not found";
}

} 

Программа работает со ссылкой на этот текстовый файл, который сам был сохранен в векторе (следовательно, partsVector) (PS я только добавил partCode в список, поскольку я остановился и имел issus)

A:Head:1:2:15.
B:Torso:0:6:5.
C:Leg:0:4:6.
D:Arm:0:4:8.
E:Tail:0:6:2.

В отношении этого фрагмента (я буду включать полную программу), проблема в том, что когда он запускается, он возвращает "Никаких символов не существует "возвращает, когда newChar равен A, что, как видно из текстового файла, есть пример, где существует A. Я могу распечатать список векторов через расширенный для l oop, и он возвращается, как ожидалось. Мне интересно, что не так с моим l oop, в котором он проходит через список векторов и останавливается на последней записи, и использует только это при проверке условия?

FULL CODE

Main

include "driver.h"
#include "implementation.cpp"
#include <fstream>
#include <vector>
using namespace std;

int main() {

readFile();
writeFile();
robotComplexity();


getch();
return 0;

}

Реализация

#include <iostream>
#include <string>
#include <sstream> 
#include <fstream>
#include <fstream>
#include <vector>
using namespace std;

//declaration of parts variables
char partCode;
std::string partName;
int maximum;
int minimum;
int complexity;

std::vector<string> partsVector;
std::ifstream partsList("Parts.txt");
std::string outputFile = "output.txt";
std::string input;

std::string newChar;
std::stringstream convertChar;

void readFile() 
{

   std::string line;

while (std::getline(partsList, line)) {
    line.pop_back();//removing '.' at end of line
    std::string token;
    std::istringstream ss(line);

    convertChar << partCode;
    convertChar >> newChar;

    // then read each element by delimiter
    int counter = 0;//number of elements you read
    while (std::getline(ss, token, ':')) {//spilt into different records
      switch (counter) {//put into appropriate value-field according to element-count

      case 0:
        newChar = token; //convert partCode from a char to a string 
        break;
      case 1:
        partName = token;
        break;
      case 2: newChar2 = token;
        break;
      case 3: minimum = stoi(token);
        break;
        case 4: complexity = stoi(token);
        break;
      default:
        break;
      }
      counter++;//increasing counter
    }
partsVector.push_back(newChar);
   } 

double robotComplexity() { 

double complexity = 10;

for(int i = 0; i < partsVector.size(); i++) {

if(newChar == "A") {
 cout << newChar <<  endl;
} else {
  cout << "Character not found";
}

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

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

}

Основная функция кода, с которым у меня возникают проблемы, - это слишком l oop в списке векторов, пока он не найдет экземпляр partCode, преобразованный в string и теперь называется newChar, что равно A. На данный момент программа проходит цикл до конца (IE, когда он равен «E») и останавливается там и использует его только для сравнения. Спасибо за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...