だから私は入力ファイルを持っています。40個の数字で構成されています。最初の20個の数値は配列に入力されます(これを確認しましたが、実際にはそこにあります)。次に、入力ファイルを閉じてから再度開きます。順次検索を使用して、入力ファイルの最初の20個の数値を配列と比較します。これは、それらがすべて成功するはずであることを意味します。次に、次の20個の数値を配列内の数値と比較します。これらはすべて、検索に失敗するはずです。この時点で、私の配列はソートされていません。
私が遭遇している問題は、成功の最後の数字がシーケンシャルを使用して見つからないことです。これを修正する方法がわかりません。
順次検索機能は次のとおりです。
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];
できます!!!!本当にありがとうございました!本当に感謝しています。