gpt4 book ai didi

c - 如何从文件中读取变量

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:09 25 4
gpt4 key购买 nike

我正在处理的程序创建了一个包含高分部分的文件 (about.txt)。

.txt 的第 12 行是...

纯文本(没有高分):

- with <0>

C:

fprintf(about,"-%s with <%ld>",highname,highscore);

我需要从文件中读取分数并测试它是否大于当前的最高分,然后再写入新的分数。

我需要...

if(score > highscore)
highscore=score;

唯一的问题是如何从文件中获取高分。

我自己做了一些研究,我确信这比我做的要容易得多,但是当我环顾四周时,我找不到任何方法来做到这一点。

谢谢。/////////////////////////////////编辑////////////////////////创建文件:

 FILE *about;
fpos_t position_name;
fpos_t position_score;
...
fprintf(about,"\n\nHIGHSCORE:\n\n");
fprintf(about,"-");
fgetpos(about,&position_name);
fprintf(about,"%s",highname);
fprintf(about,"with");
fgetpos(about,&position_score);
fprintf(about,"%ld",highscore);
fclose(about);
...

获取分数:

      FILE *about;
about = fopen("about.txt","r");

fseek(about,position_name,SEEK_SET);
fscanf(about,"%s",highname);
fseek(about,position_score,SEEK_SET);
fscanf(about,"%ld",highscore);
fclose(about);

改变变量(注意.. highscore/highname 是全局变量)

if(score >= highscore) //alter highscore
{
highscore = score;
highname = name;
puts("NEW HIGHSCORE!!!\n");
}

我得到错误:

error: incompatible types when assigning to type 'char[3]' from type 'char'

在这一行:

highname = name;

名称/分数/highname/highscore 声明在这里(在头文件中):

char name[3];
char highname[3];
long score;
long highscore;

最佳答案

您可以使用 fscanf鲜为人知但非常强大的正则表达式功能,以及根据正则表达式跳过条目的能力:

打开文件,循环跳过前 11 行。然后像这样阅读乐谱:

FILE *f = fopen("about.txt","r");
int i, score;
char buf[1024];
for (i = 0 ; i != 11 ; i++) {
fgets(buf, 1024, f);
}
fscanf(f, "%*[^<]%*[<]%d", &score);
printf("%d\n", score);

这将跳过文件中直到开头 < 的所有内容括号,然后跳过括号本身,并读取一个整数条目。注意 %*在格式字符串中指定要被 fscanf 跳过的条目. Here is a snippet at ideone .

编辑 -- 为回应您编辑中的其他问题:您不能这样分配数组,您应该使用 memcpy 相反:

memcpy(highname, name, 3);

关于c - 如何从文件中读取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161387/

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