int i = 0;
while (fscanf(fi, "%[^,],%[^,],%[^,],%[^,],%[^\n]\n", buf.first,
buf.second,
buf.third,
buf.fourth,
buf.fifth) == 5)
{
if (i == 0)
{
ptr->pid = atol(buf.first);
ptr->name = buf.second;
ptr->ram = atoi(buf.third);
ptr->size = atof(buf.fourth);
ptr->os = buf.fifth;
}
i++;
}
printf("%li %s %d %.2f %s\n", ptr->pid, ptr->name, ptr->ram, ptr->size, ptr->os);//test
捕捉2:
捕捉3:
无论如何,扫描有问题,我将输入文件\r\n-s替换为\n,但它仍然扫描错误的项目。当我在输入文件的每一行的末尾添加coma-s并在scan中将“\n”替换为“,\n”时,它会显示第一个元素,但不会扫描其他元素。
不管谁发现了问题,都应该得到一块饼干。
最佳答案
不扫描没有问题。问题在于使用char *
的循环方式。
ptr->pid = atol(buf.first);
ptr->name = buf.second; // <-------1
ptr->ram = atoi(buf.third);
ptr->size = atof(buf.fourth);
ptr->os = buf.fifth; // <-------2
在您的输出中,您可以看到整数或浮点数没有变化,与第一个条目相同,但字符串发生了变化(输出为最后一个读取的值)。
因为当您指向指针时,不会像注释1和2中所示进行复制。当它指向的值随着输出而改变时。
所以使用
strcpy
复制字符串而不是指向它们。关于c - C-换行后fscanf scanset不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43427435/