0

私のファイルには次のパターンがあります。

word1 word2 word3
wordzz word33 word2431 word341

等々。

ここで、ファイル全体を構造の配列で読み取ります。配列の各エントリは、ファイルの各行のリンクされたリストを維持します。

コード全体を説明するのはちょっと難しいですが、ここに問題があります。

次のことをしようとすると、特定の場所で

printf("\n%s",ptr1->name);
puts(ptr1->name);

リンクされたリストの先頭へptr1のptrです。(1 行目とします)
name フィールドは名前です。つまりword1,word2 etc. 、出力は次のようになります。

word1word1
word2word2
word3

word32回印刷されないのはなぜですか? この問題全体strcmpにより、リストの最後の単語にたどり着くことができません。

親切に助けてください。

PS

私がするときも

printf("%d",ptr1);

の 3 つの異なる値を出力しますがptr、いずれも ではありませんNULL

同じ構造の 2 つの同様の配列があります。同じ関数を使用して 2 つの配列に値を設定します。今

    node* ptr,*ptr1; 
ptr=first[i].ptr;
ptr1=second[i].ptr;
while(ptr!=NULL) 
{
printf(" \n1");
printf(" %s", ptr->name); // Works Fine
if(!strcmp(ptr->name,"string")) 
    {


    while(ptr1!=NULL)
    {
        printf("A %s ",ptr1->name);// Problem
                    fflush(stdout);  // EDITS AS ASKED BY USER `pmg`
                    puts(ptr1->name);       
                if(!strcmp(ptr1->name,strt))
        {
            printf("\n 4\n");
            return 1;
        }
        else
        {
        ptr1=ptr1->next;
        }
    }
    return 0;


    }
else 
    {
    ptr=ptr->next;
    }

}

どうすれば問題が発生するか @ 言及された場所であり、@ '正常に動作する' 場所ではありません。

正常に動作すると、すべてのノード (名前) が表示されますが、問題の時点​​では姓が表示されません。

しかし、問題を解決すると、その名前も表示されます。

このコード スニペットの前に、printf のみを使用して 2 番目の配列を出力します。すべてのノード (名前) を出力します。後で印刷されない理由を教えてもらえますか?

4

1 に答える 1

2
printf("\n%s",ptr1->name); // Problem

stdout端末に接続するとデフォルトで行バッファリングされるため、ストリームをフラッシュして文字列を出力する必要があります。flushfflush(stdout)の呼び出しの直後に使用します。ストリームが行バッファリングされている場合、改行文字の出力もフラッシュされます。printfstdoutstdout

putsputs常に出力に改行文字を追加するため、追加の改行文字は必要ありません。

@JensGustedt が質問のコメントで述べたように、文字列の前に改行を入れるのは悪い習慣です。

于 2012-03-04T10:00:38.340 に答える