Я столкнулся с чем-то очень странным. Код, с которым у меня возникли проблемы:
int stringPos;
int found1;
while (stringPos < 1);
{
//start searching inString for framen starting at foundn and record
found1 = inString.find(frame1, found1);
cout << found1 << endl;//if return is a number, push back foundn to a vector
if (found1 != -1)
{
foundPositions.push_back(found1);
}
//if return is npos, then break the loop
else
{
stringPos=1;
}
//add 1 to foundn so that the search would continue from where the
//search ended last
found1+=1;
}
Странно то, что когда я ставлю cout << found1 << endl;
ниже линии found1 = inString.find(frame1, found1);
цикл выполняется правильно. Однако, если у меня нет cout << found1 << endl;
он входит в бесконечный цикл …
Какие-либо предложения? СПАСИБО!
Это ошибка (и использует унифицированную переменную):
while (stringPos < 1);
как это эквивалентно:
while (stringPos < 1) {}
Если это не входит в бесконечный цикл, код, следующий за ним, будет выполнен только один раз. Исправлять:
stringPos
а также found1
,size_t
за stringPos
а также found
как std::string::find()
не возвращает int
, но возвращает size_type
(обычно size_t
).std::string::npos
вместо -1
проверить на не найдено.Ваша программа имеет неопределенное поведение, потому что вы пытаетесь использовать значение неинициализированной переменной здесь:
while (stringPos < 1)
// ^^^^^^^^^
// This is uninitialized
И здесь:
found1 = inString.find(frame1, found1);
// ^^^^^^
// This is uninitialized
Кроме того, даже если предположить, что ваши переменные были инициализированы, у вас есть точка с запятой, которая делает ваш while
цикл либо неоперативный или бесконечный цикл (как правильно указал hmjd в своем ответе).
Я бы начал с инициализации переменных stringPos и found1.