gpt4 book ai didi

c - 从文件中读取一行并将其存储在变量中

转载 作者:行者123 更新时间:2023-11-30 14:56:52 25 4
gpt4 key购买 nike

我有一个包含 2-3 行的文件,我想将每一行存储在 char* 变量中,然后对其进行翻译并将其存储到其他适当的变量中。

不是在unix中,只是在c中,有一个fscanf(%d,%s,%s, 1,2,3);就是这样,但在 UNIX 中这有点奇怪。

例如:abc 12 12

将其存储在char msg[20]中,然后msg[20]将存储在4个变量中,1个char、1个char*和2个整数。怎样才能做到呢?

这是我到目前为止得到的:

int ret_in, in1,file;
char buffer1[BUF_SIZE];
int i =0;

char fn[5] = "file";

char msg[20];
file = open(fn,O_WRONLY|O_CREAT,0644);
//msg = "test";

while(((ret_in = read (file, &buffer1, BUF_SIZE)) > 0))
{
for(i; i<ret_in; i++)
{
if(buffer1[i]!='\n')
msg[i] = buffer1[i];
}
}
printf("%s", msg); //TEST: check msg
close(file);

它将它很好地存储在 msg 变量中,但如果它由 4 个“项目”组成,我想存储在不同的变量中,我怎样才能有效地做到这一点?

最佳答案

您可以使用fopen()打开文件并获取指向文件流的指针。可以将该指针传递给 fgets() 以从文件中检索行并将其存储在缓冲区中。然后可以使用 sscanf() 解析该缓冲区。

下面是一个示例,说明其工作原理。请注意,这里我使用数组来存储每行字段的组成部分;您可能有不同的要求。

#include <stdio.h>
#include <stdlib.h>

#define MAX_LINES 100

int main(void)
{
FILE *fp = fopen("my_file.txt", "r");
if (fp == NULL) {
perror("Unable to open file");
exit(EXIT_FAILURE);
}

char buffer[1000];
char id[MAX_LINES];
char msg[MAX_LINES][10];
int val_a[MAX_LINES];
int val_b[MAX_LINES];
size_t lines = 0;

while (fgets(buffer, sizeof buffer, fp) != NULL) {
if (sscanf(buffer, "%c%9s%d%d",
&id[lines], msg[lines], &val_a[lines], &val_b[lines]) == 4) {
++lines;
}
}

for (size_t i = 0; i < lines; i++) {
printf("Line %zu: %c -- %s -- %d -- %d\n",
i+1, id[i], msg[i], val_a[i], val_b[i]);
}

fclose(fp);

return 0;
}

使用此文本文件作为输入:

A abc 12 34
B def 24 68
C ghi 35 79

给出以下输出:

Line 1: A -- abc -- 12 -- 34
Line 2: B -- def -- 24 -- 68
Line 3: C -- ghi -- 35 -- 79

关于c - 从文件中读取一行并将其存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44355640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com