Я пишу программу для чтения карты из файла .csv, и я хочу прочитать каждый раздел файла, а затем записать информацию из него в соответствующую структуру в 2D-массиве. Я использую fscanf, чтобы получить количество строк и столбцов, чтобы распределить массив по структурам, и могу прочитать первое значение до запятой и разобраться с ним. Тем не менее, также могут быть пустые поля, которые появляются в строке, например, 1 коза, 2 кошка
Моя программа читает «1» и «козел» и справляется с этим, но затем сканируется только кошка.
Я хочу, чтобы он прочитал 2 запятые, узнал, что в них ничего нет, а затем перешел к коту и прочитал его, прежде чем перейти к следующей строке
Я не знаю, как сделать правильные спецификации формата для fscanf. В настоящее время у меня есть fscanf(fp, "%[^,]", animal);
/*scans file until comma, writes the scanned text into array*/
fscanf(fp, "%[^,]", animal);
printf("Scanned in string for y (%d) and x %d = (%s)\n", j, k, anima;l);
if (strcmp(animal, "") != 0)
{
/*if first character is lowercase, change to upper)*/
if(animal[0]>90)
{
animal[0]=animal[0]-32;
}
/*Checks if item is cat goat or mouse by checking 1st letter of the scanned in array is C G or M*/
if(strncmp(animal,"C", 1) == 0)
{
/*copies name of the animal into the struct*/
strcpy(animalarray[j][k].name, "Cat");
/*write animal name into struct*/
token =strtok(animal, spaceDelimeter);
/* The 1 is already dealt with, can be moved past*/
token = strtok(NULL, commaDelimeter);
printf("token = %s\n", token);
animalarray[j][k].number= atoi(token);
printf("Animal is %s, number is %d\n", animalarray[j][k].name, animalarray[j][k].number);
}
Входной файл ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2,3
1 коза ,, 2 кота
3 мыши, 5 коз,
Выход при запуске
rows 2, columns 3
Scanned in string for row 0 and column 0 = 1 goat
token = goat
Animal is goat, number is 1
Scanned in string for row 0 and column 1 = 2
token = (null)
Segmentation fault (core dumped)
должно быть
...
Scanned in string for row 0 and column 1 = "blank"
Scanned in string for row 0 and column 1 = 2 cat
...