Das Programm, an dem ich gerade arbeite, sollte Daten aus einer bereits vorhandenen Textdatei abrufen, die Daten bearbeiten und sie in eine neue Textdatei umschreiben. Ich habe das meiste davon zum Laufen gebracht, aber es speichert keine der gescannten Daten in meinem Array. Wenn ich meine print-to-file-Funktion aufruft (was meiner Meinung nach ziemlich gut funktioniert), wird nichts in die neue Datei gedruckt.Verwenden von fscanf zum Speichern von Floats und Strings in einem Array von Strukturen in C
Die ganze Code-Datei ist ziemlich lang, so dass ich nur ein bisschen davon einschließe. Lassen Sie es mich wissen, wenn Sie eine Klärung benötigen; Jede Beratung oder Ideen wäre eine große Hilfe! Vielen Dank im Voraus!
Die Datei aus einem Strang ziehen soll, hat einen Standardformat von
Name:\n\t Hours Worked: \n\tWeekly Pay: \n\tTaxes Paid: \n\tTake-home Wage:
-Code
// in main (already declared and initialized all variables
printf("Please enter the name of the text file you'd like to read from: ");
scanf(" %s",fileName);
fp= (fopen(&fileName, "r+"));
if (fp ==NULL)
{
printf("Unable to open %s", fileName);
exit(1);
}
for(int i=0; i<10; i++){
loadFromFile(&employeeInfo[i],fp);
}
fclose(fp);
break;
int loadFromFile(struct Employee *employee,FILE *fp){
static int employeeNumb;
fscanf(fp, " %*[^:]: %s", employee->name);
if ((*employee).name==feof(fp))
printf("fscanf did not store properly");
fscanf(fp," %*[^:]: %f", &employee->hoursWorked);
fscanf(fp," %*[^$]$ %f", &employee->weeklyPay);
fscanf(fp, " %*[^$]$ %f", &employee->taxesPaid);
fscanf(fp, " %*[^$]$ %*s");
employeeNumb++;
return employeeNumb;
}
EDIT: hinzugefügt meine Druckfunktion
void saveToFile(struct Employee employee[], int employeeNumb){
FILE *fp;
char newFile[40];
printf("Please enter the name of the text file you'd like to create or overwrite: ");
scanf(" %s",newFile);
fp= fopen(newFile, "w+");//r+ if do NOT want to overwrite or a+ if append
if (fp ==NULL)
{
printf("Unable to open %s", newFile);
exit(1);
}
for(int i=0; i<employeeNumb; i++){
printToFile(fp,&employee[i]);
}
fclose(fp);}
void printToFile(FILE *fp,struct Employee *employee){
fprintf(fp, "\nName: %s", (*employee).name);
fprintf(fp,"\n\tHours Worked: %g", (*employee).hoursWorked);
fprintf(fp,"\n\tWeekly Wage: $%.2f", (*employee).weeklyPay);
fprintf(fp, "\n\tTaxes Paid: $%.2f", (*employee).taxesPaid);
fprintf(fp, "\n\tTake-home Wage: $%.2f", ((*employee).weeklyPay)-(*employee).taxesPaid);
}
EDIT Datei 2: Hinzugefügt s truct definition
struct Employee {
char name[40];
float weeklyPay;
float hoursWorked;
float taxesPaid;};
'fopen (& fileName," r + ")' -> 'fopen (Dateiname," r + ")' – BLUEPIXY
Können Sie den Teil des Codes zeigen, wo Sie tatsächlich in Ihre Datei schreiben (fwrite oder fput stuff)? – technico
@BLUEPIXY Danke für das Zeigen! Es gab mir eine Warnung, aber die Datei wurde immer noch erfolgreich geöffnet, also glaube ich nicht, dass das das Hauptproblem ist. Ich werde es aber reparieren! – Mytz