У меня есть функция, которая читает в файле, который выглядит следующим образом в структуре. Я пытаюсь убедиться, что структура заполняется должным образом; и он заполняется правильно для Пол, Высота и Вес. Однако у меня возникли проблемы с проверкой правильности заполнения имени (массива символов).Проблема с чтением строки с запятой в
Пример файла для чтения в:
Name,Gender,Height,Weight
Tanner,M,71.8,180.25
John,M,70.75,185.3
Parker,F,65.25,120.3
Meeks,M,57.25,210.2
Big,M,57.5,150.1
Jackson,F,52.1,163.4
STRUCT Определение:
struct canData
{
char name[50];
char gender;
float height;
float weight;
}CD[structSize]; // end struct BP
часть петли, которая считывает файл:
char name[50];
char gender;
float height;
float weight;
int position = 0;
filePtr = fopen(fileName, "r"); // open file
if (filePtr == NULL) // error check opening file
{
printf("Opening file failed. Please reenter filename.");
exit(1); // WILL THIS RETURN TO MENU?
} // end if
// skip header line of file
char buffer[100];
fgets(buffer, 100, filePtr);
while (fscanf(filePtr, "%[^,], %[^,], %f, %f", &name, &gender, &height, &weight) == 4) // read in
{
printf("%s\n", name); // DEBUG ATTEMPT
printf("%s\n", CD[position].name); // DEBUG ATTEMPT
printf("%f\n", weight); // DEBUG ATTEMPT
strcpy(CD[position].name, name);
CD[position].gender = gender;
CD[position].height = height;
CD[position].weight = weight;
position++;
iCount++;
} // end while
В настоящее время мой выход в следует:
(space where name should be)
(space where CD[position].name should be)
180.25
(space where name should be)
(space where CD[position].name should be)
185.3
(space where name should be)
(space where CD[position].name should be)
120.3
(space where name should be)
(space where CD[position].name should be)
...
Спасибо за понимание! Я начинающий C, поэтому я могу пропустить что-то глупое.
Какие типы 'name',' gender', '' height' и weight'? Вы уверены, что не вызываете * неопределенное поведение *, передавая указатели на объект с неправильным типом? – MikeCAT
Вы уверены, что 'CD [position] .name' в DEBUG ATTEMPT инициализирован? Пожалуйста, напишите [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – MikeCAT
Вы печатаете 'CD [position] .name' _before_' strcpy'. Кроме того, попробуйте 'while (fscanf (filePtr,"% [^,],% [^,],% f,% f ", имя, пол, высота и вес) == 4)' –