Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从cin输入c+解析坐标+;_C++ - Fatal编程技术网

C++ 从cin输入c+解析坐标+;

C++ 从cin输入c+解析坐标+;,c++,C++,我应该如何解析这个?我问你4个坐标,你像这样输入:1 3 4 3,然后如果你只输入'q'并按enter键,它应该退出。与将某些坐标替换为0或字母相同。我现在很紧张,不知道我应该如何在C++中这样做,现在我只会输入错误,如果我的输入包含字母或0,我不能只输入一个Q。输入示例: Enter two cards (x1, y1, x2, y2), or q to quit: q program quits Enter two cards (x1, y1, x2, y2), or q to quit:

我应该如何解析这个?我问你4个坐标,你像这样输入:1 3 4 3,然后如果你只输入'q'并按enter键,它应该退出。与将某些坐标替换为0或字母相同。我现在很紧张,不知道我应该如何在C++中这样做,现在我只会输入错误,如果我的输入包含字母或0,我不能只输入一个Q。输入示例:

Enter two cards (x1, y1, x2, y2), or q to quit: q
program quits
Enter two cards (x1, y1, x2, y2), or q to quit: 1 a 3 4
invalid coordinates
Enter two cards (x1, y1, x2, y2), or q to quit: 1 4 3 4
valid coordinates
bool check_坐标(游戏板类型&g_板,int-x1,int-y1,int-x2,int-y2,
整数因子1,整数因子2){
如果(x1=='q'或x2=='q'或x1=='q'或y2=='q'){

Std::Cux

字符串处理和交互输入是C++最差的东西,与几乎任何脚本语言相比,它们通常是字符串导向的和/或弱的或动态类型的。这意味着你可以经常编写乐观代码,如果失败了,你可能会恢复。 为了在强类型语言中处理字符串输入,您需要考虑何时知道输入的真正类型。例如

bool check_coordinates(Game_board_type& g_board, int x1, int y1, int x2, int y2,
                   int factor1, int factor2)
应该只传递整数。参数类型为
int
,因此您必须已经计算出,例如,
“1”
,但不是
“q”
。如果您得到
“q”
,您甚至没有三个坐标可读取-它根本不适合

现在,您正在使用to do,它有一些问题:特别是,很难跟踪流状态以及哪些变量真正初始化。请特别阅读关于
failbit
的部分

就是在

std::cin >> x1 >> y1 >> x2 >> y2;
if (check_coordinates(game_board, x1, y1, x2, y2, factor1, factor2)) {
  break;
}
在调用
检查坐标之前,必须先检查
if(!std::cin){handle_input_error()}


只需读取一整行,然后测试它是否包含一个
“q”
,或四个整数,或其他内容,就更健壮了。您仍然需要弄清楚如何处理“其他内容”,但至少原始输入没有被格式化输入函数丢弃,因为它无法执行您要求的转换。

如果在检查输入的真实内容之前转换为
int
,则处理非
int
情况的机会有点局限于检查故障位(请参阅:).这就是为什么只读取字符串通常效果更好,然后您可以在尝试之前检查字符串中的内容(可能失败)把C++转换为C++ C++ ATM TBH。我不知道该怎么处理它。从Python中所有这些数据类型和使用它们都让我感到困惑。固定数据类型是C++速度的关键之一。编译时知道的越多,程序就越快。你必须把它们分类出来或C++。是的,我认为这是我接触C++的最后一个过程。我将坚持Python和java向前。java的输入几乎和C++一样严格。
std::cin >> x1 >> y1 >> x2 >> y2;
if (check_coordinates(game_board, x1, y1, x2, y2, factor1, factor2)) {
  break;
}