2013-12-16 2 views
1

Я получаю бесконечный цикл в коде while(input.find(' ', pos1) != string::npos) Я создал этот код просто для чтения во вводе через перенаправление и создания карты вершин и вектора символов для графика. Это не очень элегантно, поэтому, если вы хотите предложить более эффективный способ чтения на входе, это тоже хорошо. Благодаря!Бесконечный цикл при чтении во входном файле?

void MSTapp::processFile() 
{ 
int pos1; 
int pos2; 
map<char, Vertex*> adjacencyList; 
vector<char> listOrder; 
string input; 
bool test = false; 
while (getline(cin, input)) { 
    pos1 = pos2 = 0; 
    if(std::string::npos != input.find_first_of("")) 
    { 

     char source = input[0]; 
     char destination = input[2]; 
     stringstream ss(input.substr(4));  
     int weight; 
     ss >> weight; 
     Edge newEdge(destination, weight); 
     adjacencyList[source]->addEdge(destination, newEdge); 
     Edge roadBack(source, weight); 
     adjacencyList[destination]->addEdge(source, roadBack); 
    } 
    else 
    { 
     while(input.find(' ', pos1) != string::npos) 
     { 
      pos2 = input.find(' ', pos1); 
      char vertex = input[pos1]; 
      listOrder.push_back(vertex); 
      Vertex* newVertex = new Vertex(vertex); 
      adjacencyList.insert(make_pair(vertex, newVertex)); 
      pos1 = pos2 + 1; 
     }; 
    }; 
}; 
Graph graph(listOrder, adjacencyList); 
prim(graph, adjacencyList[listOrder[0]]); 
} 

Входной

A B C D E F G 
A B 3 
A E 4 
B C 7 
B E 6 
B F 5 
C D 9 
C F 8 
D F 9 
D G 4 
E F 6 
F G 8 

ответ

3

Вот проблема:

while(input.find(' ', pos1) != string::npos) 
    { 
     pos2 = input.find(' ', pos1); 
     char vertex = input[pos1]; 
     listOrder.push_back(vertex); 
     Vertex* newVertex = new Vertex(vertex); 
     adjacencyList.insert(make_pair(vertex, newVertex)); 
     pos1 = pos2; 
    }; 

Изменение pos1 = pos2; к pos1 = pos2+1; - он никогда не движется, так что цикл while никогда не заканчивается.

Вы также должны убедиться, что pos1 < string::length в вашем while условиях.

+0

Добавлен еще один момент. –

Смежные вопросы