do while循环的目的是将坐标(或点)输入两个数组:points_x []和points_y []。当用户输入非整数输入时,循环将停止。由于某种原因,只有其他所有cin实际上都写入阵列。有人知道为什么吗?
cout << "Enter a list of points(x y): ";
do
{
cin >> points_x[v];
cout << points_x[v];
cin >> points_y[v];
cout << points_x[v];
howMany++;
v++;
} while (cin >> points_x[v] && cin >> points_y[v]);
答案 0 :(得分:1)
在这里您正在阅读两次(每个坐标x和y一次)
cin >> points_x[v];
cout << points_x[v];
cin >> points_y[v];
cout << points_x[v];
我认为您的意思是“一分钱”。
然后增加将结果写入数组时使用的索引。
v++;
然后,您在评估循环条件的同时再次读入每个坐标:
while (cin >> points_x[v] && cin >> points_y[v])
我认为您的意思是成为第二个“ cin”。
条件(即第二个“ cin”)期间的读数已写入下一个索引,
但是体内的读数随后会再次写入相同的索引(覆盖读取条件中的值)。
因此,最后,每个xy输入两次,一次在条件中被忽略,一次在循环体内“幸存”。
答案 1 :(得分:0)
由于输入可以是多个数字,因此最好以字符串形式输入,检查每个数字是否为数字,并在转换为整数后进行赋值。参见摘要:
bool IsAlpha(string s) {
for (const auto& c : s)
if (isalpha(c)) return true;
return false;
}
void main()
{
string str;
cout << "Enter a list of points(x y):";
while(true)
{
cout << "\n Enter X ";
cin >> str;
if (IsAlpha(str)) break;
points_x[v] = std::stoi(str);
cout << " " << points_x[v] ;
cout << "\n Enter Y ";
cin >> str;
if (IsAlpha(str)) break;
points_y[v] = std::stoi(str);
cout << points_y[v] << " ";
howMany++;
v++;
};
}