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:
c - C-换行后fscanf scanset不起作用-LMLPHP
捕捉3:
c - C-换行后fscanf scanset不起作用-LMLPHP
无论如何,扫描有问题,我将输入文件\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/

10-12 01:32