0

このコードは、入力され、ユーザーが編集できる保存されたtxtファイルを「開く」ことになっています。

たとえば、「Bob1234517」と「Max12345618」をsave.txtに保存しました...ファイルファイルを開いてリンクリストにすべてを印刷すると、「Max12345618」としか表示されません...プログラムを閉じて、最初にsave.txtを上書きせずに開こうとすると、リンクリストにすべてを印刷しても何も表示されません...

FILE* open;
char filenameopen[100];

printf ("\nType the name of the file you want to open: ");
scanf ("%s", filenameopen);
printf ("\n");

open = fopen (filenameopen, "r");
if (filenameopen == NULL)
    printf ("No such file exists\n\n");
else
{   
    phonebook_t *openentry = (phonebook_t*) malloc (sizeof(phonebook_t));
    openentry = head;

    while (1)
    {
        fscanf (open, "%s %s %d", openentry -> name, openentry -> tel, &openentry -> age);
        if (feof (open))
        {
            openentry -> next = NULL;
            break;
        }
        openentry -> next = (phonebook_t*) malloc (sizeof(phonebook_t)); 
        openentry = openentry -> next;  
    }

    fclose(open);
}
4

1 に答える 1

1

ループでは、次のノードに割り当てるとリンクされたリストの先頭が失われるように見えwhileます...したがって、ループが完了したらリスト全体を印刷できる方法はありません.

コードを次のように調整します。

//declare you head-pointer outside the scope of the if-statement
phonebook_t *ll_head = (phonebook_t*) malloc (sizeof(phonebook_t));

if (...)
{
    //...
}
else
{
    //assign a temporary pointer to use in your while-loop
    phonebook_t* openentry = ll_head;

    //...rest of your code
}

while ループが完了したらll_head、最後のノードではなく、リンクされたリストの先頭を指しているため、出力を開始します。

于 2012-09-27T12:47:18.737 に答える