【发布时间】:2026-02-17 01:30:01
【问题描述】:
我想在一行中得到坐标x y。
但 x 是 char 类型 [a 到 j] 包括 a 和 j ; y 是 int 类型 [1 到 10] 包括 1 和 10 .
示例:
cout>>"Enter coordinates ex[e4] then press enter/n";
用户应该写:d5 并按回车键。
然后我必须将两个输入字母(字符)和数字分开。
我认为这可以通过getline 或getchar 来完成
有人可以向我解释这是否可行以及如何做到这一点?
请注意,一对字母编号(不含空格,例如:f3)必须为两个不同的函数分开,一个基于char类型,另一个基于int类型
感谢您的所有回答。别担心,你没有解决我的作业,我正在编写一个小型海战游戏 :-) 我不知道该怎么做,我所知道的只是学习经验。
这里是代码:这个函数检查char的值:
int nx;
nx=x; //Trasfromazione char x in int (NumeroX)
switch(x) {
case 97 ... 106:{ //Codice ascii a,b,c...
return true;
break;
}
default:{
cout<<"\n---Lettera non valida\a\n\n";
return false;
break;
}
}
}
这个函数检查int的值:
bool checknum(int y){
bool v=false;
switch(y) {
case 1 ... 10 :{
v=true;
break;
}
default:{
cout<<"\n---Numero non valido\a\n\n";
return false;
break;
}
}
return v;
}
这是调用两个函数的代码:
do{
cout<<"\n-Inserisci lettera numero\n>";
cin>>x>>y;
}while(((checknum(y))==false) or((checklett(x))==false) );
如果我的输入是两个字母,这会导致一个永恒的循环
05-02-2020 dd-mm-yyyy 为@Tedlyngmo 编辑
使用此代码,它似乎可以工作:
do{
cout<<"\n-Inserisci lettera e numero\n>";
cin>>x>>y;
cin.clear();
}while((checklett(x)==false)or(checknum(y)==false));
你知道为什么吗?
【问题讨论】:
-
使用
std::cin的最天真的方法应该可以工作。请出示您的代码 -
1/ 获取一个字符串作为输入。 2/ 将字符串拆分为一个字母字符和一个数字字符。 3/ 编写函数将它们转换为您可能想要的整数索引
-
@Useless 为什么这么复杂?
istream可以为你做所有这些 -
它可以做 1 和 2,当然。问题是 OP 似乎没有意识到 3 是一个单独的步骤,并且未能将他们的问题分解为可实现的块。
-
感谢您的所有回答。别担心,你没有解决我的作业,我正在编写一个小型海战游戏 :-) 我不知道该怎么做,我所知道的只是学习经验。
标签: c++ char int coordinates