换行后C-fscanf scanset无法正常工作

时间:2017-04-15 14:49:17

标签: c scanf

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:
Capture 2
捕获3:
Capture 3

无论如何扫描有问题,我用\ n替换了我的输入文件\ r \ n-s,但它仍然扫描错误的项目。当我在输入文件的每一行的末尾添加coma-s并替换" \ n"用",\ n"在扫描中,它显示第一个元素,但它不扫描其他元素。

无论谁解决问题,都应该得到一个cookie。

1 个答案:

答案 0 :(得分:2)

扫描没有问题。问题在于你在循环中使用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复制字符串而不是指向它们。