读取一个数字用逗号分隔的文件,并将每一行存储到一个结构指针中

Reading a file with numbers separated by commas and storing each line into a struct pointer

我有一个指向 struct pcb 的结构指针 pcbptr。为了简化一点,我会说 pcb 有 3 个参数都是 int 类型,所以我有

pcbptr mypcb = malloc(sizeof(pcb))
mypcb->first = 0;
mypcb->second = 0;
mypcb->third = 0;

现在我有了一个名为 input.txt 的文件,基本上它看起来像这样:

3, 5, 2
5, 2, 1

我想做的是创建 2 个不同的 pcbptrs 来存储以下值 所以我的第一个 mypcb 看起来像这样:

mypcb->first = 3, mypcb->second = 5, mypcb->third = 2,

第二个 mypcb 将如下所示:

mypcb->first = 5, mypcb->second = 2, mypcb->third = 1

我遇到的问题是试图跟踪我读到的地方。因此,我可能会在第一个 pcb 上调用从文件读取函数,然后在到达行尾时停止写入。然后对于我的第二个 pcb,我想从第二行的开头开始阅读,这是我最后停下的地方。

基本上我有一个 while 循环,在每个循环中我首先初始化我的 pcbptr,然后调用读取这些文件的函数,但我无法指定从哪里开始读取。

谁能解释一下我是怎么做到的?

肯定还有其他问题问的基本上是同一件事,但写一个答案可能比找到重复的答案更容易。

您可能想用 fgets() 读取行并用 sscanf() 转换它们:

char buffer[4096];

while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
    pcb *new_pcb = malloc(sizeof(*new_pcb));
    if (new_pcb == 0)
        …report out of memory error; do not pass go; do not collect 0…
    if (sscanf(buffer, "%d, %d, %d", &new_pcb->first, &new_pcb->second, &new_pcb->third) != 3)
        …report data format error; do not leak memory…
    …process or save data pointed at by new_pcb somewhere…
}

显然,您可以根据需要指定与 stdin 不同的输入文件流(您可能更愿意这样做)。