2016-12-17 11 views
2

リンクリストを読み込み、読み込んだすべての情報を出力するプログラムを作ろうとしています。私の問題は、単に出力することができないということです。私が見つけることができないいくつかの問題があります。Cリンクリストをファイルから読み込んで別のファイルに書き込む

#include <stdio.h> 
#include <stdlib.h> 


struct sarasas 
{ 
    char *reiksme; 
    struct sarasas *kitas; 
}; 



int main() 
{ 
    struct sarasas *sarasasPtr, *pradz, *pab, *elem; 

    pradz = NULL; 
    pab = NULL; 

    FILE *duomPtr; 
    printf("Iveskite duomenu failo pavadinima: "); 
    char failas[255]; 
    scanf("%s", failas); 
    duomPtr = fopen(failas, "r"); 

    if(duomPtr == NULL) 
    { 
     printf("Toks duomenu failas neegzistuoja \n"); 
     exit(0); 
    } 

    int k = 0; 
    char paimtaReiksme[255]; 

    while(fscanf(duomPtr, "%s", paimtaReiksme) != EOF) 
    { 
     if(k == 0) 
     { 
      sarasasPtr = (struct sarasas*)malloc (sizeof (struct sarasas)); 
      sarasasPtr->reiksme = paimtaReiksme; 
      sarasasPtr->kitas = NULL; 
      pradz = sarasasPtr; 
      pab = sarasasPtr; 
     } 

     else 
     { 
      sarasasPtr = (struct sarasas*)malloc (sizeof (struct sarasas)); 
      sarasasPtr->reiksme = paimtaReiksme; 
      sarasasPtr->kitas = NULL; 
      pab->kitas = sarasasPtr; 
      pab = sarasasPtr; 
     } 
     k++; 
    } 

    if(pradz == NULL && pab == NULL) 
    { 
     printf("Tuscia\n"); 
     exit(0); 
    } 

    FILE *rptr; 
    printf("Iveskite rezultatu failo pavadinima: "); 
    char failas2[255]; 
    scanf("%s", failas2); 
    rptr = fopen(failas2, "w"); 

    while(sarasasPtr->kitas != NULL) 
    { 
     fprintf(rptr, "%s", sarasasPtr->reiksme); 
    } 


    return 0; 
} 
+0

? –

+0

解決しました。ループは終了していません。 @ Mhd.Tahawi – AdomasArabella

答えて

2

コードに無限ループがあります。上記whileループでここ

while(sarasasPtr->kitas != NULL) 
{ 
    fprintf(rptr, "%s", sarasasPtr->reiksme); 
} 

は、 あなたが何度も何度もを同じ要素を印刷しようとしているので、あなたは無限loop.insteadで終わる、あなたはそれぞれの後に次の要素へのポインタを変更する必要がありますすべての繰り返し。さらに

while(sarasasPtr != NULL) //check whether pointer points to NULL 
{ 
    fprintf(rptr, "%s", sarasasPtr->reiksme); 
    sarasasPtr = sarasasPtr->kitas; //make pointer point to next element 
} 

、あなたがmallocの戻り値をキャストする必要はありません:あなたはこのような何かを試すことができHere's why(クリック)を正確にあなたが持っている問題は何であるか

+0

私は、このプログラムがファイルに1単語だけを出力することを発見しました。たぶんあなたはそれがなぜそうであるか知っていますか? @ケルビム? – AdomasArabella

+0

は印刷されている最後の単語です。問題は同じ 'char array []'、つまり 'paimtaReiksme'を' sarasasPtr-> reiksme'に何度も向けようとしていることです。 'strcpy()'関数を試してください – Cherubim

+0

1: 'string.h'ヘッダファイルをインクルードしてください。 2: 'sarasasPtr-> reiksme = paimtaReiksme;の代わりに' strcpy(sarasasPtr-> reiksme、paimtaReiksme); 'を使います。 – Cherubim

関連する問題