gpt4 book ai didi

C - 将文本文件中的行存储在结构中

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:56 24 4
gpt4 key购买 nike

我刚开始学习 C 编程,我在一个学校项目中遇到了这个问题。我有一个包含契约(Contract)的文本文件,如下所示:

609140307   Carla Aguiar Cunha Paredes Pires    PT 309 181 020 533 713 02F  13.8
814991297 Ricardo Andrade Nogueira Matos PT 099 597 635 807 514 05D 10.35
843818099 Eduardo Carneiro Paredes Clementino Castro PT 829 961 009 571 587 02D 5.75
647507641 Cristiana Eanes Almada Martins Baptista PT 257 687 479 093 378 02E 10.35
684741046 Marisa Calado Cardoso Quadros Barbosa PT 722 479 016 817 208 0RC 10.35
...

字段由制表符分隔,大约有 10,000 行契约(Contract)

我需要将每一行存储到一个结构中。这就是我所做的:

#include <stdio.h>

typedef struct {
char id_contract[10];
char name[60];
char id_local[26];
char power[5];
}CONTRACTS;

void main() {
CONTRACTS c[10000] = { 0 };
int i = 0;
FILE *file = fopen("contracts.txt", "r");
if (file)
{
char line[120];
while (fgets(line, sizeof line, file) && i < 5)
{

if (sscanf(line, "%9s%60s%26s%5s",
c[i].id_contract,
c[i].name,
c[i].id_local,
c[i].power) == 4)
{
printf("Contract ID = %s\n", c[i].id_contract);
printf("Name = %s\n", c[i].name);
printf("Local ID = %s\n", c[i].id_local);
printf("Power = %s\n", c[i].power);
++i;
}
}
else {
printf("Error!\n");
}
}

这是我得到的输出:

Contract ID = 609140307
Name = Carla
Local ID = Aguiar
Power = Cunha
Contract ID = 814991297
Name = Ricardo
Local ID = Andrade
Power = Nogue
Contract ID = 843818099
Name = Eduardo
Local ID = Carneiro
Power = Pared

基本上这是用空格分隔字段,我不知道如何用制表符 分隔字段。我是初学者,所以这对我来说很难。提前致谢!

最佳答案

在您的 typedef 中更正最后 2 个变量:

char id_local[27];
char power[6];

那么,你的 sscanf 应该是:

sscanf(line, "%9c %[^\t] %26c %5s",
c[i].id_contract,
c[i].name,
c[i].id_local,
c[i].power) != 0)
{

因为名称是可变长度的。

立即尝试 ;)

关于C - 将文本文件中的行存储在结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48600710/

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