【发布时间】:2019-11-30 14:00:07
【问题描述】:
所以,我有一个文本文件,内容如下,用空格分隔:
int int int char int char int char,例如:1 10 1 A 2 B 3 C
这意味着交货 id 是 1,月份是 10,我有 1 个价值 10 美元/件的 A,所以总共 10 美元,我有 2 个价值 20 美元/件的 B,所以 2* 20 美元,以此类推,最大字符为 F,因此总共 6 项。我想把它放在一个数据结构上,但问题是不是每行都提到了每个字符,如果一个字符中有 0 比它不以任何方式出现在行上
1A 2C
上面的例子,0 B 所以该行中没有任何形式的 B。 我应该使用什么方法来处理文件并避免内存垃圾?我尝试使用 fscanf 但我不知道一行中有多少个字符。文件最长可达1000行,我搜索了一下发现
while(!feof(file))
在最后一行之前不是读取文件的可靠方法,我运行 For 循环读取 1000 行并尝试分离垃圾,但它确实无效。 我的结构如下:
typedef struct
{
int id;
int day;
int numberofitems[6];
}asd;
numberofitems 为 A 为 0,B 为 1,C 为 2 ... F 为 5,
总体而言,txt 文件可能看起来像这样,但包含更多行:
3 12 4 B 3 C 9 F 5 D
4 12 6 B 8 C 1 D 9 F 3 A
5 12 6 C 7 A 3 B
我应该如何处理这个文本文件?
【问题讨论】:
-
示例
1 10 1 A 2 B 3 C的形式不是“int char int char int char”,除非您认为空间是一个字符,在这种情况下它的形式是“int char int” char int char char char int ...` -
在您示例的第二行中,有 2 个 F 值。这会在现实中发生还是这是一个错字?我们应该添加 F 吗?我会逐行读取文件,并使用
strsep在空格处分割行。然后,我将使用atoi解码数值并与“A”、“B”、...进行比较以识别开关中的字母。 -
对不起,这是一个错字,每个字符只能在一行中出现一次。