Я сейчас пытаюсь отсканировать одну строку из файла, но у меня есть цепочка строк.
Это пример строки, по которой мой профессор сказал мне работать.
enum status{MEM,PREP,TRAV}
union type { double int day, char* title, float cost}
13953 P 12 26 2011 1 5 2012 2 A 3.30 249.00 A 2.0 148.00 MEM Cuba Christmas 3 0 2 Sierra Del Rosario, Cuba
Я в порядке со всем, что принимается в момент (MEM Cuba Christmas), когда я сканирую его из ФАЙЛА. Я прочитал первую часть данных, используя только fscanf()
, но MEM - это перечислимый тип с объединяющим типом, который определяет следующий ввод. Моя проблема с синтаксисом сканирования. Я попытался использовать getline, начиная с MEM, но я нажал на загвоздках с помощью токенизации, поскольку в городе / стране могут быть пробелы. Не уверен, какие другие сканы использовать, я смотрел на sscanf()
, но не был уверен, работает ли он с файлами.
ОБНОВЛЕНИЕ:
int main(void);
{
int m, length = 100;
char *word, file_name[100];
FILE *file_point
printf("Please enter file name with .txt extension:");
scanf("%s", file_name);
file_point = fopen(file_name,"r");
while (fscanf(file_point, "%d", &m) != EOF)
{
temp.dest_code = m;
fscanf(file_point, " %c %d %d %d %d %d %d %d",
&temp.area_code,
&temp.Smonth, &temp.Sday, &temp.Syear,
&temp.Emonth, &temp.Eday, &temp.Eyear,
&temp.leg_num);
for (n=0; n < temp.leg_num; n++)
{
fscanf(file_point," %c %f %f",
&temp.tleg[n].travel_type,
&temp.tleg[n].travel_time,
&temp.tleg[n].cost);
}
fscanf(file_point," %d %d %d ",
&temp.adult,
&temp.child,
&temp.infant);
temp_name = (char *)malloc(length + 1);
getline (&temp_name, &length, file_point);
word = strtok(temp_name, ",");
temp.dest_name=(char *)malloc(strlen(word)+1);
strcpy(temp.dest_name, word);
word = strtok(NULL, ",");
temp.dest_country=(char *)malloc(strlen(word)+1);
strcpy(temp.dest_country,word2);
printf("name:%s country:%s\n", temp.dest_name, temp.dest_country);
printf("adult:%d , child:%d , infant:%d \n", temp.adult, temp.child, temp.infant);
}
}
Это был код, который я использовал в качестве основы, которую я придумал, но не знал, как обращаться с перечислимым и объединением. Я думал сделать что-то вроде:
getline(&status, &length, file_point);
но как мне преобразовать строку в целое или с плавающей точкой?