- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想从文件中读取这样的输入
sphere 3 2 3 4
pyramid 2 3 4 12 3 5 6 7 3 2 4 1 2 3
rectangle 2 3 4 1 9 12
我想做这样的事情
char name[64];
int arr[12];
ifstream file (..);
while(file)
{
file >> name;
while( //reach end of line)
file >> arr[i]
}
如您所见,我不知道将输入多少个整数,这就是我想在换行处停止的原因。我是用 getline 做的,然后拆分线,但他们告诉我这只能用 >> 运算符来完成。
注意:我不能使用 std::string
或 std::vector
。
最佳答案
简单的版本是使用类似于 std::ws
的操纵器,但不是在遇到换行符时跳过所有空白设置 std::ios_base::failbit
.然后将使用此操纵器代替跳过空格,而不是隐式跳过换行符以外的空格。例如(代码未测试,但我认为像这样删除了错误和编译错误的东西应该可以工作):
std::istream& my_ws(std::istream& in) {
std::istream::sentry kerberos(in);
while (isspace(in.peek())) {
if (in.get() == '\n') {
in.setstate(std::ios_base::failbit);
}
}
return in;
}
// ...
char name[64];
int array[12];
while (in >> std::setw(sizeof(name)) >> name) { // see (*) below
int* it = std::begin(array), end = std::end(array);
while (it != end && in >> my_ws >> *it) {
++it;
}
if (it != end && in) { deal_with_the_array_being_full(); }
else {
do_something_with_the_data(std::begin(array), it);
if (!in.eof()) { in.clear(); }
}
}
我个人的猜测是作业要求将值读入 char
数组,然后使用 atoi()
或 strol()
转换它们>。我认为这将是一个无聊的练习解决方案。
(*) 从不,即使在示例代码中,也不要在 char
数组 array
中使用格式化输入运算符 without 还设置了最大允许大小!可以通过设置流的 width()
来设置大小,例如,使用操纵器 std::setw(sizeof(array))
。如果在对 char
数组使用格式化输入运算符时 width()
为 0
,则会读取任意数量的非空白字符。这可以很容易溢出数组并成为安全问题!本质上,这是拼写 C 的 gets()
的 C++ 方式(现在已从 C 和 C++ 标准库中删除)。
关于C++如何读取流直到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689997/
我需要在 JavaScript 中的笛卡尔坐标和球坐标之间进行转换。我在论坛上浏览了一下,没有找到我要找的东西。 现在我有这个: this.rho = sqrt((x*x) + (y*y) + (z*
有没有matrix3d可以像这样把矩形变成梯形的?我知道常规的 2d 矩阵变换只能以平行四边形结束,因为您只能有效地倾斜和旋转。 div { width: 300px; height:
关于这个例子(d3.j radial tree node links different sizes),我想知道是否可以在 d3.js 中混合径向树和直线树。 对于我的 jsFiddle 示例:htt
我尽量把标题写得最好,但我不确定如何准确描述这里发生的事情,所以请随时更正。 我想使用 › 直 Angular 引号 (›) 而不是 > 直 Angular 引号 (>),虽然 › 字符比 > 短,但
我正在尝试使用 CSS 创建一个具有圆边的矩形棱柱,如下图所示。 到目前为止,我已经指定了顶部和底部的边界半径。问题是我不知道如何让另一边的左右边缘向内 curl 。因此,拐 Angular 处不应有
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
首先,我刚刚开始学习 HTML 和 CSS。 我想如何使用这段代码: https://codepen.io/martinjkelly/pen/vEOBvL .container { width:
我是一名优秀的程序员,十分优秀!