Как я могу получить координаты в C ++? - PullRequest
0 голосов
/ 24 января 2020

Я хочу получить координаты 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

Может кто-нибудь объяснить мне, если это возможно и как это сделать?

Примечание что пара letternumber (без пробела, например: f3) должна быть разделена для двух разных функций, одна из которых основана на char, тип другой основывается на int type

Спасибо за все ответы. Не волнуйтесь, вы не решаете мою домашнюю работу, я программирую небольшую военно-морскую битву :-) Я понятия не имел, как это сделать, все, что я знаю, это просто научный c опыт.

Здесь код: эта функция проверяет значение 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) );

, если мой ввод состоит из двух букв, это вызывает вечное l oop

05-02-2020 дд-мм-гггг Редактировать для @ Tedlyngmo

С этим кодом, похоже, работает:

do{
    cout<<"\n-Inserisci lettera e numero\n>";
    cin>>x>>y;
    cin.clear();    
}while((checklett(x)==false)or(checknum(y)==false));

знаете почему?

Ответы [ 4 ]

0 голосов
/ 24 января 2020

Вы можете использовать возможности форматированного ввода любого 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';
}
0 голосов
/ 24 января 2020

Простой способ добиться того, что вы просите, - это прочитать ввод с cin в char[2], чтобы буква сохранялась в char[0], а число в char[1], или вы можете прочитать ее в разделенные переменные, с char для хранения буквы и int для хранения числа:

int main()
{
    char s[2];
    // In a char array
    printf("Enter coordinates: ");
    std::cin >> s;

    // In separated char and int variables
    char a;
    int b;
    printf("Enter coordinates: ");
    std::cin >> a >> b;
    return 0;
}
0 голосов
/ 24 января 2020

Вот как вы можете это сделать:

std::cout << "Enter coordinates ex[e4] then press enter/n";
char x;
int y;
std::cin >> x >> y;
0 голосов
/ 24 января 2020
std::string str;
std::getline(std::cin, str);
std::cout << str; 

затем делайте что хотите со своей строкой, например https://en.cppreference.com/w/cpp/string/basic_string/stol с первой буквы

...