printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
Измените порядок, чтобы читать сначала, печатать позже.
В идеале данные в вашем файле должны быть разделены запятой, символом табуляции или каким-либо другим символом. Если данные находятся в фиксированных столбцах, то читайте все как текст (включая целые числа), а затем преобразуйте целое в текст.
Также проверьте возвращаемое значение для fscanf
, если результат не равен 5, то некоторые поля отсутствовали.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *cfPtr = fopen("clients.txt", "r");
if(cfPtr == NULL)
{
puts("The file can't be open");
return 0;
}
char name[11], sex[11], dad[11], mom[11], line[300];
int age;
fgets(line, sizeof(line), cfPtr); //skip the first line
while(fgets(line, sizeof(line), cfPtr))
{
if(5 == sscanf(line, "%10s%10s%10d%10s%10s", name, sex, &age, dad, mom))
printf("%s, %s, %d, %s, %s\n", name, sex, age, dad, mom);
}
fclose(cfPtr);
return 0;
}
Изменить, изменил формат sscan
для непосредственного чтения целых чисел, изменил распределение буфера до 11, и это все, что нужно.