从昨天晚上开始,我一直在努力解决 atoi 函数的这个问题,但没有逃脱。我创建了一个程序,其中两个功能是: 1- 查找编号。自操作系统更新以来的天数。2-找到号码。自防病毒软件更新以来的天数。现在经过大量循环后,我发现了 mm/dd/yy 格式的两个日期并写在一个文件中。目前我只处理防病毒日期(我在将十六进制值转换为十进制后得到)并将其存储在一个新文件中。例如,将日期设为:07/17/2013。只有这个日期被写入文件。文件中的十六进制数据(通过十六进制工作室打开文件后)为:
HEX VALUE --------------------------DECIMAL VALUE
37 2F 31 37 2F 32 30 31 33 0D 0A --- 7/17/2013..
现在我运行 3 个循环,以便在单独的 char 变量中获得 7、17、2013。但是当我使用 atoi 将这些转换为十进制时,7 和 17 变为 0,但 2013 仍然是 2013。我已经完成了 90% 项目的其余部分并坚持到最后一块。无法更改文件的字符编码,因为我必须在域机器上实现整个程序,并且我找不到任何使用 UTF 的方法。将单个日、月、年转换为整数值后,我必须找到一个日期的总值并将其与当前日期进行比较并找出差异。所以,请提供一些解决方案。
int main(void)
{
FILE *fp_av_dt;
int ch_av,n=0,n1=0,n2=0,i=0,iday1=0,imon1=0,iyr1=0;
int mon_val1=0,arr_days_values_av=0;
char dt_av[11],amon1[3],aday1[3],ayr1[5];
fp_av_dt=fopen("c:\\windows\\web\\wallpaper\\av_dt.txt","r");
while((ch_av=fgetc(fp_av_dt))!='\n')
{
if(isalnum(ch_av) | ch_av=='/' | ch_av=='\n')
/* leave any other char other than '/','\n' or any digit */
{
dt_av[n]=ch_av;
//printf("%c",dt_av[n]);
//store chars in dt_av array
n++;
}
}
printf("\n");
for(n=0;dt_av[n]!='/';n++) /* Loop & wait till '/' comes */
{
amon1[i]=dt_av[n]; /* store elements in month's array */
//printf("%c",amon1[i]);
i++;
}
i=0;
for(n1=(n+1);dt_av[n1]!='/';n1++) /*Loop & wait till next '/' comes */
{
aday1[i]=dt_av[n1]; store elements in day's array */
//printf("%c",aday1[i]);
i++;
}
i=0;
for(n2=(n1+1);dt_av[n2]!='\n';n2++)
{
ayr1[i]=dt_av[n2]; store elements in year's array */
//printf("%c",ayr1[i]);
i++;
}
i=0;
iday1=atoi(aday1); /* convert array to integer */
printf("%d\n",iday1);
imon1=atoi(amon1);
printf("%d\n",imon1);
iyr1=atoi(ayr1);
printf("%d\n",iyr1);
system("PAUSE");
} /* Uncomment printf lines to see the value of any variable */
这里是睡觉时间。所以会在 10 小时后上线。谢谢...