我的项目是从一个文件中读取(其行排列为"整数"-"整数",例如: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)
处理。