我有一个这种格式的文件:
11
1 0
2 8 0
3 8 0
4 5 10 0
5 8 0
6 1 3 0
7 5 0
8 11 0
9 6 0
10 5 7 0
11 0
第一行是行数,所以我可以创建一个循环来读取带有行数的文件。 对于其他行,我想逐行读取文件并存储数据,直到我在行上得到“0”,这就是每行末尾有0的原因。 第一列是任务名称。 其他列是约束名称。
我尝试编写代码,但它似乎无法正常工作
printf("Constraints :\n");
for (int t = 1; t <= numberofTasks; t++)
{
F >> currentTask;
printf("%c\t", currentTask);
F >> currentConstraint;
while (currentConstraint != '0')
{
printf("%c", currentConstraint);
F >> currentConstraint;
};
printf("\n");
};
“0”表示任务约束的结束。
我认为我的代码无法正常工作,因为任务4的约束10也包含“0”。
提前感谢您的帮助
此致
答案 0 :(得分:0)
问题是你正在从文件中读取单个字符,而不是读取整数,甚至是逐行读取。将您的currentTask
和currentConstraint
变量更改为int
而不是char
,并使用std::getline()
读取您从中读取整数的行。
试试这个:
F >> numberofTasks;
F.ignore();
std::cout << "Constraints :" << std::endl;
for (int t = 1; t <= numberofTasks; ++t)
{
std::string line;
if (!std::getline(F, line)) break;
std::istringstream iss(line);
iss >> currentTask;
std::cout << currentTask << "\t";
while ((iss >> currentConstraint) && (currentConstraint != 0))
{
std::cout << currentConstraint << " ";
}
std::cout << std::endl;
}
话虽如此,每行终止0
是不必要的。 std::getline()
会在到达行尾时停止阅读,operator>>
会在到达流末尾时停止阅读。