Ich löse gerade eine Zuweisung über die dynamische Speicherzuweisung und es heißt, dass ich ein Array von Ganzzahlen dynamisch zuweisen, sie in Form einer Tabelle in einer Datei speichern und später den Durchschnitt dieser Zahlen finden und drucken sollte. Aber wenn es um das Drucken der geht Durchschnitt, ich bekomme falsche Ergebnisse.
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *fp=fopen("some.txt","w+");
printf("How many numbers are you going to input?\n");
int n,i;
scanf("%d",&n);
int *tab;
int sum=0;
tab=(int*)malloc(n*sizeof(int));
for(i=0;i<n && !(feof(fp));i++){
printf("Enter a number:\n");
scanf("%d",tab+i);
fprintf(fp,"%d",*(tab+i));
}
for(i=0;i<n && !(feof(fp));i++){
fscanf(fp,"%d",tab+i);
printf("%d\t",*(tab+i));
sum+=*(tab+i);
}
float mean=sum/(float)n;
printf("%f\n",mean);
free(tab);
}
Dies ist eine Beispieleingabe, die alle Zahlen drucken soll, die ich in die Datei geschrieben habe, und als Wert des Durchschnitts am Ende sollte sie 4,6666 gedruckt haben (so etwas für diese drei spezifischen Eingaben).
How many numbers are you going to input?
3
Enter a number:
4
Enter a number:
5
Enter a number:
5
4 1.333333
Es gibt zwei Hauptprobleme in Ihrem Code.
Wenn Sie die Daten in der ersten Schleife in die Datei schreiben, sollten Sie die Zahlen durch ein Leerzeichen oder eine neue Zeile trennen, z
fprintf(fp,"%d\n",*(tab+i));
Zwischen dem Schreiben und Lesen der Datei sollten Sie zum Anfang zurückkehren. Zwischen den beiden Schleifen einfügen
fseek(fp, 0, SEEK_SET);
Der Code enthält einige weitere Fehler, die in einigen Fällen zu Problemen führen können:
Die Funktion feof()
kann nur nach einer Leseoperation verwendet werden, z. B. nach fscanf
der Unterscheidung zwischen EOF oder Fehlern.
Sie sollten fclose
die Datei, wenn Sie fertig sind.
Sie sollten das Ergebnis aller Funktionen überprüfen, z. B. die fopen
keinen NULL
Zeiger zurückgegeben haben scanf
oder fscanf
die erwartete Anzahl von Elementen erfolgreich konvertiert haben, ...
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen