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