mxwawaawxm 发表于 2021-6-16 18:54

c语言文件读取

有这样一个需求。想生成几个随机数,打算在编译后的exe文件下弄个配置文件,然后读取生成随机数的相关信息

大致上如此读取配置文件的参数,生成随机数的范围min_num、max_num,随机数的个数times,不生成的数字blacklist_num

然后开始生成随机数

这几个都可以用fscanf函数以类似这样的形式min_num=%d\n来读取,然后判断返回值是否为1,来判断是否正确读取
(fscanf(fp, "min_num=%d\n", num_info))==1
但最后blacklist_num=45, 60, 70,因为后面的数字不能确定是多少个,那这种要如何读取
我想到的方法是构造一个较大的数组,然后以如下形式读取
(fscanf(fp, “blacklist_num=%s\n”, num_info))==1
再调用strtok函数切分,分别存进数组里
而且,如果不小心输入的是字母等无效的信息,还得做判断
总感觉很麻烦,请问大家有没有方便些的思路或方法

Cool_Breeze 发表于 2021-6-16 20:02

没有,只能老老实实的写代码!

729 发表于 2021-6-16 21:27

读取到文件尾就停止读取?

mxwawaawxm 发表于 2021-6-16 21:42

729 发表于 2021-6-16 21:27
读取到文件尾就停止读取?

是个方法,但也得把读取到的数字字符串分割成数字数组
要不然后面生成随机数,就没法排除这些数字
还是有些麻烦

无名氏wyw 发表于 2021-6-16 21:46

加入不是文件读取,你会怎么做?
控制台怎么输入就怎么读取,sscanf或者fscanf自行百度
实在不行就委曲求全,改逗号为空格甚至换行符
方法多的是,还不至于到用PHP的地步,某些人还真是闲的没事干(

挑灯看花 发表于 2021-6-17 09:08

加一个不生成的数字的个数{:1_907:}

c03xp 发表于 2021-6-17 10:23

都差不多吧,其他方法也不比strtok简单多少,#include <windows.h>的话可以用ini文件,用GetProfileStringGetProfileInt系列读取

mxwawaawxm 发表于 2021-6-17 22:43

本帖最后由 mxwawaawxm 于 2021-6-17 22:55 编辑

无名氏wyw 发表于 2021-6-16 21:46
加入不是文件读取,你会怎么做?
控制台怎么输入就怎么读取,sscanf或者fscanf自行百度
实在不行就委曲求 ...
我打算配置文件里,是按这样的格式写参数
;不生成的数字(最多支持20个数字)
blacklist_num=45, 60, 70
最后发现用fscanf读取最后的字符串还行不通。因为fscanf读取到第一个空格,就停止读取,结果只读取到一个数字加逗号45,
难不成得读到blacklist_num=,然后再以fgetc函数依次存进事先定义的字符数组么。

或者用fgets函数么{:301_998:}(fscanf(fp, “blacklist_num=%s\n”, blacklist_num_str)

无名氏wyw 发表于 2021-6-19 17:31

mxwawaawxm 发表于 2021-6-17 22:43
我打算配置文件里,是按这样的格式写参数
;不生成的数字(最多支持20个数字)
b ...

那就不用空格嘛,实在不行就像你说的,用fgets之后再用sscanf

mxwawaawxm 发表于 2021-7-1 21:40

无名氏wyw 发表于 2021-6-19 17:31
那就不用空格嘛,实在不行就像你说的,用fgets之后再用sscanf

弄了一个半成品,写得很凌乱
https://www.52pojie.cn/thread-1462633-1-1.html
页: [1] 2
查看完整版本: c语言文件读取