【发布时间】:2021-05-06 12:04:33
【问题描述】:
我有一个输入文件,其中包含数字输入参数和其他不相关的文本。
例如
//file orig_data.txt
Number of customers
25
Customer_id Customer_SSN
1 1234
2 3456
....
25 0123
尽管客户数量可能不同,但所有输入文件都具有相同的格式。上面的例子有 25 个客户,另一个输入文件可能有 35 个客户,因此有 35 行数据(id 和 SSN)
对我来说,一种方法是手动删除文本并创建一个仅包含数字数据的修改输入数据。
//file modified_data.txt
25
1 1234
2 3456
....
25 0123
使用这种类型的输入文件(modified_data.txt),我可以使用以下代码来读取数据。
void readdata() {
FILE* fp = fopen("modified_data.txt","r");
fscanf(fp, "%d", &no_cust);
int* ids = new int[no_cust+1];
int* ssns = new int [no_cust+1];
for(int i = 1; i <= no_cust; i++)
fscanf(fp, "%d %d", &ids[i], &ssns[i]);
//other stuff
}
有没有办法适当地使用orig_data.txt 本身并让读取此文件的函数跳过包含不需要的文本的第一行和第三行?
【问题讨论】:
-
如果总是相同的行,那么只需阅读带有
fgets的行并丢弃数据。 -
混合
fscanf()和fgets()时要小心:c - fgets doesn't work after scanf - Stack Overflow