我很难找到解决方案,主要是因为热门搜索者认为数据和日期是相同的,按日期我的意思是例如11/10/2014 9:00。
好吧我有一个结构
struct Rezervations{
char user_login[10];
int room_number;
char date[40];
} rezervations[100];
我有文件“reservations.txt”,我拿着我的数据是这样的:
LOGIN1; 5; 11/10/14 09:00:00; LOGIN2; 1; 12/10/14 09:00:00;
等
到目前为止,我正在使用if
这样的
int loadReservation()
{
char reserved[200];
char temNumber[2];
fp=fopen("rezervations.txt", "r");
fscanf(fp, "%s", reserved);
int i;
int z=0;
int k=0;
char temp[10];
for(i=0;i<strlen(reserved);i++)
{
int j=0;
while(reserved[i]!=59)
{
temp[j]=reserved[i];
j++;
i++;
}
if (z==0||z%3==0)
{
memcpy(reservations[k].user_login,temp,j);
}
else if (z==1||z%3==1)
{
memcpy(tempLiczba,temp,j);
reservations[k].room_number = tempLiczba[0] - '0';
}
else if (z==2||z%3==2)
{
memcpy(reservations[k].date,temp,j);
k++;
}
z++;
}
fclose(fp);
return k;
}
我知道这段代码很乱,但我希望你能看到我在这里想要完成的事情。我还没有使用malloc
(例如reserved
),但这不是我的问题,我想知道如何阅读这个日期。
但不幸的是,对于我约会,它停止了工作。我猜它停止了工作,因为我的日期包含/
和:
,但我不知道如何绕过它。此日期由strftime()
生成,我不想更改它。
另外,如果您可以查看rezervations[k].room_number = tempLiczba[0] - '0';
,因为这就是我从文本文件中读取整数的方式。
答案 0 :(得分:1)
嗯,在C中可能有一百种方法可以实现这一点,但是一种(简单的方法)可能是使用sscanf的一种变体。
http://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm
实施例/伪代码
char * line_from_file = read_next_line();
sscanf(line_from_file, "%s;%d;%s", rezervations[k].user_login, &rezervations[k].room_number, rezervations[k].date);
编辑:
也许%s只停止在空格上阅读,而你的分隔是分号,你可能需要像
这样的东西sscanf(line_from_file, "%[^;];%d;%[^;]", ...)