2016-04-30 6 views
-3

Was ich tun möchte, ist n (von Benutzer) Elemente in eine Datei zu schreiben. Dann lesen Sie die Elemente erneut in ein Array und sortieren Sie sie und schreiben Sie sie erneut in einer anderen Datei. Schließlich öffnen Sie diese Datei und zeigen ihren Inhalt an. Aber der Code scheint nicht zu funktionieren, alle Syntax, Grammatik usw. wird überprüft, was ist der Fehler ??Was ist der Fehler in diesem Code? (C - Dateibehandlung)

#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

Haben Sie versucht, es auszuführen und zu debuggen? –

+0

@SimonBosley Ja, sehr oft. Manchmal läuft es und druckt Müll und andere Male einfach nur – Kunal

+1

So @Kunal, wenn Sie es zu debuggen, welche Zeile schief geht und wie? –

Antwort

0

Sie wollen also den Fehler wissen? Ich habe einen RIESIGEN gefunden.

Wie ich Ihr Programm ausgeführt wurde, habe ich einen Segmentierungsfehler tritt nach dieser Zeile bestimmt:

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

Der größte Fehler ist, dass Sie eine Datei zum Schreiben von Daten, um es geöffnet, aber Sie machen eine ziemlich verwirrende Schleife.

Dies ist Ihr Code:

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

In dem Zustand, in ist, wird der Wert von i die Obergrenze Wert Ihres ar int Array überschreiten. Sie setzen den oberen Begrenzungswert auf 100, aber in der while-Schleife wird er endlos ausgeführt, bis ein Segmentierungsfehler auftritt (wenn ich 100 überschreite), weil fprintf niemals ein EOF zurückgibt (entsprechend dem, was das Linux-Handbuch für fprintf behauptet).

Was würde ich stattdessen vorschlägt, ist dies:

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

wobei n die Anzahl der Elemente ist schließlich drucken (wie vom Benutzer zu Beginn des Programms angezeigt).