如何在c++中从cin中获得2个int
How to get 2 ints from cin in C++?
我试图从用户获得三对int。但是如果我输入字母,我的代码就会进入不定式循环。我做错了什么?
struct Point
{
int x;
int y;
};
istream& operator>> (istream& is, Point& pt)
{
int x, y;
is >> x >> y;
if (!is)
return is;
pt.x = x;
pt.y = y;
return is;
}
int main()
{
vector<Point> points;
Point pt;
while (true)
{
if (cin >> pt)
{
points.push_back(pt);
if (points.size() == 3)
break;
continue;
}
cout << " error, try again" << endl;
cin.clear();
}
for (int i = 0; i < 3; i++)
cout << "(" << points[i].x << ", " << points[i].y << ")" << endl;
}
while (true) ...
循环永不停止。break
永远不会执行,因为cin >> pt
总是失败。您无法通过简单的istream操作来解决这个问题,因为一旦您提供了错误的输入,cin>> pt将永远不会成功。要么期望正确的输入,如果不正确则直接失败:
while (points.size() < 3 && (cin >> pt))
{
points.push_back(pt);
}
if (points.size() < 3) throw "up";
或将输入作为字符串读取,并将其解析为单独的操作。
当我们在做的时候,简化你的提取器:
istream& operator>>(istream& is, Point& pt)
{
Point p;
if (is >> p.x >> p.y) pt = p;
return is;
}
当cin >> pt
失败时,它在流中留下行结束符。这将导致下一次提取立即失败,从而创建无限循环。
将cin.ignore()
添加到循环的末尾,以删除失败行的末尾;然后下一次提取将等待更多的输入。
相关文章:
- 如何在一维数组中的每个元素中都有多个int值
- 将两个 int 数组相乘
- 比较 C 中的两个 int 数组
- 将彼此平行的两个 int 向量的元素求和
- 无论如何,是否可以使用setCursorPos(int,int)函数,但没有采用两个int使它需要速度较慢的两倍
- C 双重不能等于两个INT分裂
- 是一个包含两个INT(只有两个INT)的结构,保证是大小(INT)的两倍
- 带有两个INT列表的结构将减少为一个INT
- C 比较两个INT,错误或Wierd End
- 从C 中的线路读取(每行都有一个字符串和几个INT值)
- 处理需要在c++中一起存储的3个int类型的正确方法
- 如何调用一个函数,该函数用一个int向量取几个int
- 从字符串中读取/解析多个 INT
- 使用cin在一行上读取多个int
- 使用函数输入 1 个 int 和 1 个字符串数组并循环
- 多个 int main()的?
- 将多个 int 变量组合成一个 int 变量
- 需要对两个 int 数组的总和进行细分
- c++,stl.将具有rgb颜色的字符串转换为3个int值
- 我的类包含 1 个枚举、2 个 int 和一个指针。它没有虚函数,但测量 20 字节。为什么?