gpt4 book ai didi

c - 如何使用 C 中的文件打印结构

转载 作者:行者123 更新时间:2023-11-30 16:53:20 27 4
gpt4 key购买 nike

数据文件包含迈阿密和多伦多的天气数据(城市名称、日期、温度、降水量)。我需要创建一个打印结构的函数,但值位于 .txt 文件中。这是文件:(info.txt)

Miami,2,-6.4,0
Toronto,2,9.5,0.8
Miami,3,-11.7,0
Toronto,3,6.1,0

这是结构:

struct Weather{

char location; //will be "M" or "T"
int daynum;
double temp;
double precip;
};

这是一个解析器函数:

void parseLine(char toParse[], struct Weather * toLoad)
{
char * theToken;
theToken = strtok(toParse, ",");
toLoad->location = theToken[0];
theToken = strtok(NULL, ",");
toLoad->daynum = atoi(theToken);
theToken = strtok(NULL, ",");
if(theToken != NULL)
{
toLoad->temp = atof(theToken);
}
else
{
toLoad->temp = -400;
}
theToken = strtok(NULL, ",");
if(theToken != NULL)
{
toLoad->precip = atof(theToken);
}
else
{
toLoad->precip = -1.0;
}
}

所以我的问题是如何使用结构体和解析函数创建另一个函数来打印 location、daynum、temp 和 precip 的值。

注意:我在主函数中使用了 argc 和 argv。您还应该知道我对文件操作不熟悉,所以我不太确定如何正确使用文件函数。

编辑:我的主要问题是弄清楚在“main”中做什么,以便我可以创建打印功能

最佳答案

你想要这样的东西吗?

void printStruct(FILE *fout, struct Weather *in)
{
fprintf(fout, "%s,%d,%f,%f", in->location == 'M' ? "Miami" : "Toronto", in->daynum, in->temp, in->precip);
}

按如下方式使用:

#include <stdio.h>

#define ELEMSIZE(arr) (sizeof(*arr))
#define ARRAYSIZE(arr) (sizeof(arr)/ELEMSIZE(arr))

int main(void)
{
char line[1024];
struct Weather weather;
FILE *fp;

fp = fopen("info.txt", "r");
fread(line, ELEMSIZE(line), ARRAYSIZE(line), fp);
parseLine(line, &weather);
printStruct(stdout, &weather);
fclose(fp);

return 0;
}

注意:您可能希望将 parseLine 的第一个参数更改为 FILE * (您必须施展一些魔法才能获得 strtok code> 工作,但它将提高效率以及灵 active 和可扩展性)。

关于c - 如何使用 C 中的文件打印结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897689/

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