2016-04-30 11 views
-3

私がしたいのは、n個の要素をファイルに書き出すことです。次に、要素を再度配列に読み込んでソートして書き直します別のファイルに保存します。 最後にそのファイルを開き、その内容を表示します。 しかし、コードは動作していないようです。すべての構文、文法などは何がエラーであるかチェックされていますか?このコードのエラーは何ですか?(C - ファイル処理)

#include<stdio.h> 
struct data 
{ 
int a,ar[100]; 
}e; 


int main() 
{ FILE *f1,*f2; 


int i,j,n,t; 
printf("\nEnter Array Size:"); 

scanf("%d",&n); 
f1=fopen("Array.txt","w"); 
for(i=0;i<n;i++) 
{ printf("\nEnter %d element:",i+1); 
    scanf("%d",&e.a); 
    fprintf(f1,"%d",e.a); 
} 
fflush(stdin); 
fclose(f1); 
rewind(f1); 
i=0; 
f1=fopen("Array.txt","r"); 
while((fscanf(f1,"%d",&e.ar[i++]))!=EOF) 
{} 
fclose(f1); 
for(i=0;i<n;i++) 
    { for(j=0;j<n-1;j++) 
    {  if(e.ar[j]>e.ar[j+1]) 
      { t=e.ar[j]; 
       e.ar[j]=e.ar[j+1]; 
       e.ar[j+1]=t; 
      } 
    } 
    } 


f2=fopen("Sort.txt","w"); 
i=0; 
while((fprintf(f2,"%d",e.ar[i]))!=EOF) 

{ i++;} 
fclose(f2); 
f2=fopen("Sort.txt","r"); 
while((fscanf(f2,"%d",&e.a))!=EOF) 
    { printf("%d ",e.a); 
    } 
fclose(f2); 
return 0; 
} 
+1

実行してデバッグしてみましたか? –

+0

@SimonBosleyはい、何度も。ときどき実行され、ガベージを印刷し、他の時はただ終了します – Kunal

+1

それで@ Kunalはあなたがそれをデバッグしているときに、どの行が間違って行きますか? –

答えて

0

エラーを知りたいですか?私は巨大なものを見つけました。

私はあなたのプログラムを実行していたとして、私はセグメンテーションフォールトがこの行の後に発生して決定している:

f2=fopen("Sort.txt","w"); 

ここで重大なエラーがあなたがそれにデータを書き込むためのファイルを開いたということですが、あなたが作っていますやや複雑なループです。

これはあなたのコードである:それはである状態で

i=0; 
while((fprintf(f2,"%d",e.ar[i]))!=EOF) 
{ i++;} 

、iの値は、あなたのARのint配列の上限値を超えてしまいます。上限の値を100に設定しますが、whileループでは、fprintfがfprintfが主張しているLinuxのマニュアルにしたがって、fprintfが決してEOFを返さないため、セグメント化エラーが起こるまで(100回経過したとき)、無限に実行されます。 nが最終的に(プログラムの先頭で、ユーザによって示されるように)印刷する要素の数である

for(i=0;i<n;i++){ 
    fprintf(f2,"%d",e.ar[i]); 
} 

:私が代わりに何を示唆している

はこれです。

関連する問題