У меня проблемы с заполнением массива данными, которые я пытаюсь прочитать из текстового файла.Поэтому я использовал следующий код, чтобы попытаться прочитать следующий текстовый файл:
текстовый файл:
Smith, Susan
B
80.0
17.76
Sanders, Fred
M
87.25
23.45
Kerr, Heidi
M
80.0
47.86
Russo, Rick
B
83.75
12.15
код, который я использовал:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct employee
{
char name[100]; // employee's name - last, first
char title; // title 'B' or 'M'
double hours_worked; // total number of hours worked
double payrate; // pay rate per hour
double payment; // total payment for the pay period
} Employee;
int main()
{
Employee payroll[200];
int i = 0;
FILE*infile;
infile = fopen("payroll.txt", "r");
//fscanf loop that will fill payroll array with data from file
while (!feof(infile))
{
fscanf(infile, " %s", &payroll[i].name); //Reading name
fscanf(infile, "%c", &payroll[i].title); //Reading title
fscanf(infile, "%lf", &payroll[i].hours_worked); //Reading hours worked
fscanf(infile, "%lf", &payroll[i].payrate); //Reading pay rate
++i;
}
printf("%d\n", i);
//loop that tests to make sure array was correctly filled
for (i = 0; i < 4; ++i)
{
printf("%s\n", payroll[i].name);
printf("%c\n", payroll[i].title);
printf("%lf\n", payroll[i].hours_worked);
printf("%lf\n", payroll[i].payrate);
}
fclose(infile);
system("pause");
return 0;
}
Итак, я понялчто мой вопрос должен был быть первым fscanf, который читает имя строки, потому что fscanf останавливается, как только он читает пробел, где он читает имена, поэтому я переключился на fgets ():
fgets(payroll[i].name, 100, infile);
Но это все еще нене дать мне правильный результат.
Пожалуйста, помогите
edit: Так что, очевидно, что-то еще не так с моими fscanfs, потому что если я отредактировал txt-файл для этого, чтобы устранить пробелы, чтобы можно было использовать fscanf:
Smith,Susan
B
80.0
17.76
Sanders,Fred
M
87.25
23.45
Kerr,Heidi
M
80.0
47.86
Russo,Rick
B
83.75
12.15
где я использую этот код:
while (!feof(infile))
{
fscanf(infile, " %s", &payroll[i].name); //Reading name
fscanf(infile, "%c", &payroll[i].title); //Reading title
fscanf(infile, "%lf", &payroll[i].hours_worked); //Reading hours worked
fscanf(infile, "%lf", &payroll[i].payrate); //Reading pay rate
++i;
}
Я все равно получу ошибку, когда результаты печати выглядят как-то безумно, как это: https://i.stack.imgur.com/x6l7a.png