我想在一行中获得坐标 x y 。
但是 x 是char
类型[ a 至 j ],包括 a 和 j ; y 是int
类型[ 1 至 10 ],包括 1 和 10 。
示例:
cout>>"Enter coordinates ex[e4] then press enter/n";
用户应输入:d5,然后按 Enter。
然后我必须分开两个输入字母(字符)和数字。
我认为可以通过getline
或getchar
有人可以告诉我这是否可行以及如何做到吗?
请注意,对于两个不同的功能,必须将一对字母编号(不带空格:f3)分开,一个基于char
类型,另一个基于int
类型< / p>
感谢所有答案。不用担心,您没有解决我的作业,我正在编写一些海战游戏:-)我不知道如何做到这一点,我所知道的只是学业经历。
这里是代码:此函数检查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));
你知道为什么吗?
答案 0 :(得分:0)
实现要求的一种简单方法是通过在cin
中使用char[2]
读取输入,因此字母将存储在char[0]
中,数字将存储在{{1}中},也可以在单独的变量中读取它,其中char[1]
存储字母,而char
存储数字:
int
答案 1 :(得分:0)
这是您可以执行的操作:
std::cout << "Enter coordinates ex[e4] then press enter/n";
char x;
int y;
std::cin >> x >> y;
答案 2 :(得分:0)
您可以使用任何std::istream
(如std::cin
)的格式化输入功能。
#include <iostream>
int main() {
char letter;
int number;
if(std::cin >> letter >> number) {
std::cout << "success. got letter " << letter << " and number " << number << '\n';
} else {
// failure
}
}
编辑:当std::cin
进入失败状态时,更新的问题现在显示问题。这是清除状态并丢弃缓冲区中仍然没有垃圾字符的一种方法。
#include <iostream>
#include <limits>
// A function template to read a value from a stream and to validate it
template<typename T>
bool get_val(std::istream& is, T min, T max, T& out) {
if(is >> out) {
return out >= min && out <= max;
}
return false;
}
int main() {
char letter;
int number;
while(true) {
std::cout << "Enter coordinates: ";
if(get_val<char>(std::cin, 'a', 'j', letter) &&
get_val<int>(std::cin, 1, 10, number))
{
// success
break;
} else {
// failure
if(std::cin.eof()) {
// end of file, the user is not there anymore
std::cout << "Abort...\n";
return 1;
}
std::cout << "Invalid input\n";
// clear error state
std::cin.clear();
// clear input buffer to newline
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
std::cout << "Got letter " << letter << " and number " << number << '\n';
}
答案 3 :(得分:-3)
std::string str;
std::getline(std::cin, str);
std::cout << str;
然后使用您的字符串进行所需的操作,例如https://en.cppreference.com/w/cpp/string/basic_string/stol 从第一个字母开始