0

リンクされたリストからアイテムを出力する関数を書いています。正常に出力されていますが、最後に到達してnullまたは初期番号のないノードに到達すると、乱数が出力されます(コンピューターに保存されていると思います)。どうすればこれを修正できますか?

void printList(intNode*& intList)
{
intNode* current;

if (intList==NULL)
{
    cout << "No elements to print-list is empty." << endl;
}
else
{
    cout << "Elements in list:" << endl;
    current = intList;
    while (current!=NULL)
    {
        cout << current->intValue <<endl;
        current=current->nextNode;
    }
    if (current==NULL)
    {
        cout << "End of list" << endl;
    }
}
}

リストを作成する場所は次のとおりです。

 void createList(intNode*& intList)
 {
  intNode* lastInt; //points to last integer in file
  lastInt = NULL;
  int fileInt; //int read from input file

ifstream intInputFile;
intNode* anotherInt;
anotherInt = new intNode;

intInputFile.open("intInput.txt");
if (intInputFile.is_open())
{
    cout << "intInput.txt open successful" << endl;
    cout << "check" <<endl;
    while(intInputFile>>fileInt)
    {
        if(intList==NULL)
        {
            intList = anotherInt;
            lastInt = anotherInt;
            lastInt->nextNode = NULL;
            lastInt->nextNode = new intNode;
        }
        else
        {
            lastInt = lastInt->nextNode;
            lastInt->nextNode = NULL;
            lastInt->nextNode = new intNode;
        }
        lastInt->intValue = fileInt;
        cout << lastInt->intValue <<endl;
    }
    lastInt->nextNode->nextNode=NULL;
    intInputFile.close();
    cout << "List created from input file" << endl;
}
else
{
    cout << "intInput.txt open unsuccessful" << endl;
}
}
4

2 に答える 2

0

あなたは間違った順序で物事をやっています。で新しいノードを作成しますlastInt->nextNodeが、値を に割り当てますlastInt->intValue。つまり、リストの最後には初期化されていないノードが常に存在することになります。

全体がかなり複雑に見えます。これはどう:

intNode * intList = NULL;
intNode * lastInt = NULL;

while( intInputFile>>fileInt )
{
    // Initialise a new node.
    intNode *newNode = new intNode;
    newNode->nextNode = NULL;
    newNode->intValue = fileInt;

    // Append to list.
    if( intList == NULL ) {
        intList = newNode;
    } else {
        lastInt->nextNode = newNode;
    }
    lastInt = newNode;

    // Make noise...        
    cout << newNode->intValue <<endl;
}

ループを終了するまで「NULL」を設定しない (すべての中間のものは冗長です)、またはダミーのヘッド ノードを使用するなど、リストを作成するための他のオプションがあります。ただし、シンプルにしましょう。

ループ内で一時変数を使用して、データを割り当てるノードを明確にしていることに注意してください。

于 2012-12-20T02:53:30.947 に答える
0

int を初期化しないと、int にアクセスしたときに、何を返すか確信が持てなくなります。すべてのintを初期化することをお勧めします.Karthikがコメントしたようにまだ起こっている場合は、リストがどのように初期化されているかを確認してください.

于 2012-12-20T02:22:10.600 に答える