在C语言中逐行读取文本文件

在C语言中逐行读取文本文件,c,file,scanf,fgets,C,File,Scanf,Fgets,我需要能够从文本文件中获取数据,该文件的格式如下: 起始现金:1500英镑 转弯限制(-1表示无转弯限制):10 游戏结束前剩余的玩家数量:1 属性集乘数:2 酒店之前的房屋数量:4 必须平均建造房屋:是 把钱放在免费停车场:否 拍卖财产:无 上班族的工资乘数:1 为了澄清,我需要冒号后面的数据。我真的不知道该怎么做。我在读其他问题,他们都说要使用fgets,但我不知道每行的长度,我们不能静态分配C字符串,所以我将fgets指向的行存储在哪里?另外,是否可以使用fscanf(我们已经学习了如何执

我需要能够从文本文件中获取数据,该文件的格式如下:

起始现金:1500英镑
转弯限制(-1表示无转弯限制):10
游戏结束前剩余的玩家数量:1
属性集乘数:2
酒店之前的房屋数量:4
必须平均建造房屋:是
把钱放在免费停车场:否
拍卖财产:无
上班族的工资乘数:1

为了澄清,我需要冒号后面的数据。我真的不知道该怎么做。我在读其他问题,他们都说要使用
fgets
,但我不知道每行的长度,我们不能静态分配C字符串,所以我将
fgets
指向的行存储在哪里?另外,是否可以使用
fscanf
(我们已经学习了如何执行
fscanf
,但没有学习
fgets
)?在处理这个问题时,我的想法是获取每一行,然后使用我不需要的字符串文本,使用sscanf扫描每一行(我认为这会起作用):

sscanf(str, "Starting Cash: %d", &startingCash);

这行吗?

使用
fopen()
打开文件后,您可以执行以下操作

float cash;
int turnlimit, plyrno, mult, house;
fscanf(fin, "%*[^:]: %f", &cash);
fscanf(fin, "%*[^:]: %d", &turnlimit);
fscanf(fin, "%*[^:]: %d", &plyrno);
其中
fin
文件
指针

%[^::://code>将一直扫描到遇到一个
*
用于分配抑制,但不包括该问题;这意味着它的值将被读取,但不会分配到任何地方

在读取到
之前的点后,必须读取
本身,后跟空格。因此,
必须在格式字符串中后跟空格


请参阅。

您可以使用
strchr
定位行中冒号的位置。或者您可以使用
strtok
解析行“我们不能静态分配C字符串”。简单的方法是定义一个足够大的本地数组,以容纳预期的最长输入。使用
fgets
并根据需要限制输入长度。“我需要在冒号后显示数据。”是否可以保证数据以相同的顺序显示?或者只需使用面向字符的输入,如
fgetc
,然后检查
:'
,然后检查
'\n'
(中间的内容,减去任何前导或尾随空格,就是您想要的内容)@ft\u error