如何从 C++ 中的输入中获取特定数字?
How do I get a specific number from an input in c++?
有 N 个有序对的列表,形式为 (A,B)
示例输入:
(200,500)
(300,100)
(300,100)
(450,150)
(520,480)
我只想从输入中获取数字,以便我可以在我的 Point 结构中使用它们,并使用它们来表示坐标平面上的位置。
这是我的代码:
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <map>
#include <fstream>
using namespace std;
struct Punto
{
double x,y;
double distancia;
double zona;
};
int main()
{
int n=4;
Punto arr[n];
int x, y;
for(int i=0; i<n; i++){
cin.ignore(); //(
std::cin >> x;
arr[i].x = x;
std::cout << "Punto " << i << " x " << x << '\n';
cin.ignore(); //,
std::cin >> y;
arr[i].y = y;
std::cout << "Punto " << i << " y " << y << '\n';
cin.ignore(); //)
}
return 0;
}
问题是这仅适用于第一个条目,但不适用于以下条目。
ignore
除了要忽略的字符外,还将丢弃换行符,这意味着在循环的第二次迭代中 cin.ignore()
将忽略离开开头的换行符(
仍在流中并导致 std::cin >> x
失败。
更可靠的方法是读取分隔符并检查它们的值,这将有助于检测文件格式中的错误或代码中的错误,并且还有一个额外的好处,即读取字符会自动跳过包括新行在内的空白。
boll readDelim(char expected)
{
char ch;
std::cin >> ch;
return ch == expected;
}
int main()
{
const int n=4;
Punto arr[n];
int x, y;
for(int i=0; i<n; i++){
if (!readDelim('(')) break;
std::cin >> x;
arr[i].x = x;
std::cout << "Punto " << i << " x " << x << '\n';
if (!readDelim(',')) break;
std::cin >> y;
arr[i].y = y;
std::cout << "Punto " << i << " y " << y << '\n';
if (!readDelim(')')) break;
}
return 0;
}
有 N 个有序对的列表,形式为 (A,B)
示例输入:
(200,500)
(300,100)
(300,100)
(450,150)
(520,480)
我只想从输入中获取数字,以便我可以在我的 Point 结构中使用它们,并使用它们来表示坐标平面上的位置。
这是我的代码:
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <map>
#include <fstream>
using namespace std;
struct Punto
{
double x,y;
double distancia;
double zona;
};
int main()
{
int n=4;
Punto arr[n];
int x, y;
for(int i=0; i<n; i++){
cin.ignore(); //(
std::cin >> x;
arr[i].x = x;
std::cout << "Punto " << i << " x " << x << '\n';
cin.ignore(); //,
std::cin >> y;
arr[i].y = y;
std::cout << "Punto " << i << " y " << y << '\n';
cin.ignore(); //)
}
return 0;
}
问题是这仅适用于第一个条目,但不适用于以下条目。
ignore
除了要忽略的字符外,还将丢弃换行符,这意味着在循环的第二次迭代中 cin.ignore()
将忽略离开开头的换行符(
仍在流中并导致 std::cin >> x
失败。
更可靠的方法是读取分隔符并检查它们的值,这将有助于检测文件格式中的错误或代码中的错误,并且还有一个额外的好处,即读取字符会自动跳过包括新行在内的空白。
boll readDelim(char expected)
{
char ch;
std::cin >> ch;
return ch == expected;
}
int main()
{
const int n=4;
Punto arr[n];
int x, y;
for(int i=0; i<n; i++){
if (!readDelim('(')) break;
std::cin >> x;
arr[i].x = x;
std::cout << "Punto " << i << " x " << x << '\n';
if (!readDelim(',')) break;
std::cin >> y;
arr[i].y = y;
std::cout << "Punto " << i << " y " << y << '\n';
if (!readDelim(')')) break;
}
return 0;
}