这是代码的一小部分,我想要将读完第一次后声明一个变量将第一次存起来 然后再判断条件再跳到第二次的位置,请问我这样声明变量将代码改成
这样行吗如果不行应该改成什么样子呢
size_t count = fread(&usb, 12, 1, fpRead);//读第一次
if (count == 0)
{
break; // 到达文件末尾,退出循环
}
int usb1=fread(&usb, 12, 1, fpRead)
if (0xF0 == usb.datasend && 0xA9 == usb.session)//判断条件
{
fseek(fpRead, usb.PayloadLength, SEEK_CUR);//跳到第二次开头的的位置
fread(&usb, sizeof(USBHEADER),1, fpRead); //读第二次
size_t count = fread(&usb, 12, 1, fpRead);//读第一次
if (count == 0)
{
break; // 到达文件末尾,退出循环
}
if (0xF0 == usb.datasend && 0xA9 == usb.session)//判断条件
{
fseek(fpRead, usb.PayloadLength, SEEK_CUR);//跳到第二次开头的的位置
fread(&usb, sizeof(USBHEADER),1, fpRead); //读第二次
好像是可以的,你把第一次读取到的数据记录下来的过程移除了,而实际上它不需要保存,只需要读取一次后判断条件即可,但是你的1行和6行用的是fread(&usb, 12, 1, fpRead);而10行又成了fread(&usb, sizeof(USBHEADER),1, fpRead);我建议在读第一次时,把读的字节数改为
fread(&usb, sizeof(USBHEADER),1, fpRead);
以读取正确的数据长度。
第六行也是。
啥意思,请描述清楚一点
代码存在一些问题。在第一次读文件之后,应该将变量 count 设置为再次读文件返回的值,而不是再次读文件:
size_t count = fread(&usb, 12, 1, fpRead);//读第一次
if (count == 0)
{
break; // 到达文件末尾,退出循环
}
count = fread(&usb, 12, 1, fpRead);
if (0xF0 == usb.datasend && 0xA9 == usb.session)//判断条件
{
fseek(fpRead, usb.PayloadLength, SEEK_CUR);//跳到第二次开头的的位置
fread(&usb, sizeof(USBHEADER),1, fpRead); //读第二次
}
如果你希望在判断条件后再读第二次,可以把第二次的读入放在条件判断后面。
代码如下:
size_t count = fread(&usb, sizeof(USBHEADER), 1, fpRead);
if (count == 0)
{
break; // 到达文件末尾,退出循环
}
if (0xF0 == usb.datasend && 0xA9 == usb.session)
{
fseek(fpRead, usb.PayloadLength, SEEK_CUR);
count = fread(&usb, sizeof(USBHEADER), 1, fpRead);
}
另外您第一段代碼int usb1=fread(&usb, 12, 1, fpRead) 缺少分号
应该写成 int usb1=fread(&usb, 12, 1, fpRead);
不知道你这个问题是否已经解决, 如果还没有解决的话: