如何在c++中从文本文件中将整数(每行两个)读取到单独的数组中


对于任何语法错误,我们深表歉意,英语不是我的第一语言。

我的项目是从一个文件中读取(其行排列为"整数"-"整数",例如:2-6(第一个整数表示骰子需要掷骰子的次数,第二个整数表示一个骰子上可能的面的数量(从上面的例子来看,一个6面骰子掷了2次(。我正在努力使用数组从每一行中提取两个整数,以便操作它们。

知道吗?

非常感谢!!!

首先,构造一个struct(或者class,如果你愿意的话(来将你的数据绑定到一个数据结构中,即所需的滚动和可能的面,类似于:

struct Die {
int rolls;
int faces;
};

在C++中,如果您需要一个动态数组,则更喜欢使用std::vector,因为许多内部内存管理(如new/delete(都被抽象掉了。因此,我们需要的是一个Die的数组,即std::vector<Die>。现在剩下的只是读取数据。首先,一些错误处理

std::ifstream inp("test.txt");
//if error opening file display Error
if(!inp){
std::cout << "Error opening file";
return 1;
}

这消除了文件打开错误。接下来,我们创建一个Die元素的空数组。

std::vector<Die> arr;

现在,一个接一个地读取Die的元素很简单:

Die die;
while(inp>>std::ws>>die.rolls) {
inp.ignore(std::numeric_limits<std::streamsize>::max(), '-');
inp>>std::ws>>die.faces;
arr.push_back(die);
}

std::ws只是忽略输入文件行中的所有空白。inp.ignore()部分基本上读取并忽略代码中指定的直到-的所有字符,然后在忽略-字符之后读取die.faces。就是这样,读一行数字,比如2-6。现在只需要重复,直到文件没有更多的数据要读取,这由while条件while(inp>>std::ws>>die.rolls)处理。

相关内容