如何使用C ++获取坐标?

时间:2020-01-24 11:03:54

标签: c++ char int coordinates

我想在一行中获得坐标 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。

然后我必须分开两个输入字母(字符)和数字。

我认为可以通过getlinegetchar

完成

有人可以告诉我这是否可行以及如何做到吗?

请注意,对于两个不同的功能,必须将一对字母编号(不带空格: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));

你知道为什么吗?

4 个答案:

答案 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 从第一个字母开始