Итак, у меня есть входной файл. Он состоит из 40 номеров. Первые 20 чисел вводятся в массив (я проверил это, они на самом деле там). Затем я закрываю и повторно открываю входной файл. Я сравниваю первые 20 чисел во входном файле с массивом, используя последовательный поиск. Это означает, что все они должны быть успешными. Затем я сравниваю следующие 20 чисел с числами в моем массиве, все они должны быть безуспешными. На данный момент мой массив не сортирован.C++ Последовательный поиск не находит последний элемент
Проблема, с которой я сталкиваюсь, заключается в том, что последнее число для успешного никогда не встречается с использованием последовательных. Я не знаю, как это исправить.
Вот последовательная функция поиска:
length = 19;
void Search::sequential(ItemType item, bool& found)
{
int place = 0;
while (place < length && item != list[place])
place++;
found = (place < length);
}
А вот мои удачные/неудачные циклы
outFile << "\n\n ************Sequential Successful ********** \n";
outFile << endl << "ID" << endl;
inFile >> num;
for(int i=0; i<=length && inFile; i++)
{
search.sequential(num, found);
if (found)
outFile << num << endl;
inFile >> num;
}
//sequential unsuccessful
outFile << "\n\n ************Sequential unsuccessful ********** \n";
outFile << endl << "ID" << endl;
for(int i=0; i<=length && inFile; i++)
{
search.sequential(num, found);
if (!found)
outFile << num << endl;
inFile >> num;
}
Однако мой результат:
************Sequential Successful **********
ID
1111
3352
4567
5678
6789
7890
8901
9012
1223
2113
8546
2374
4723
9573
3284
7474
8594
3589
5858
//THERE SHOULD BE 1925 HERE BUT THERE ISN'T
************Sequential unsuccessful **********
ID
9456
3584
2222
4319
4477
5710
5497
1502
1599
1504
1506
9943
8833
9944
6678
5555
5660
9911
6130
1613
Если я удалить «if (found)» заявляет, что все работает отлично, но как мне обойти это без его удаления?
Заранее спасибо
--------------- редактировать ---------------
Хорошо, когда я изменилась длина до 20, она все еще не работает. Я так потерялся.
Вот где я создать массив
inFile >> num;
for (int i=0; i<length && inFile; i++)
{
search.addToList(num);
inFile >> num;
}
и здесь функция addToList
void Search::addToList(ItemType num)
{
if (index < length) //ive tried taking out this statement just to see if it makes a difference and it didn't
{
list[index] = num;
index++;
}
}
инициализирую индекс 0 в конструкторе
Это, как я объявляю массив
ItemType list[length];
ЭТО РАБОТАЕТ !!!! Большое спасибо всем вам! Я очень ценю это.
Вы напечатаете Вам массив неверно: в его текущей форме вы печатаете элементы за фактический конец массива. Обычно я использую `for (int i = 0; i
Lars
2010-12-09 16:42:58
Да, это показывает, что мой массив держит правильные значения, спасибо. – 2010-12-09 16:55:24