读取一个数字用逗号分隔的文件,并将每一行存储到一个结构指针中
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 个不同的 pcbptr
s 来存储以下值
所以我的第一个 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
不同的输入文件流(您可能更愿意这样做)。