Например, если я пытаюсь записать в int букву А, то программа падает. Можно ли как-то это отлавливать до того, как символ попадёт в переменную?
Можно конечно создать ещё один char и из него переводить в int. Есть ли другие способы?
Код:
while (true)
{
int x,y;
char Y;
cout << "\nSelect X:";
cin >> x;
cout << "Select Y:";
cin >> Y;
y = (int)Y - 65;
if (x > 9 || x < 0 || y>9 || y < 0)
{
cout << "Input error\n";
continue;
}
if (comp[x][y] != 0&&comp[x][y]!='O')
{
cout << "Set failed\n";
continue;
}
break;
}
С помощью cin вы не сможете присвоить инту символ, так как cin жден именно цифр, так что у вас в X Y остануться те же значения, что и были, а если вы позаботились о том, чтобы в них изначально не было мусора, то это будет 0 (ну или что вы там по дефолту поставили). Если уж хотите передовать символы, так сделайте X Y чарами, ну или воспользуйтесь сишной функцией scanf.
И да, если возьметесь вводить символы, то обязательно очищайте после ввода входной поток, так как \n - это тоже символ!!!
Ну вот вариант ввода для шахматной доски - буква и цифра:
string buf;
cin >> buf;
if (buf.length() != 2) { cerr << "Error!\n"; exit(1); }
int x = toupper(buf[0])-'A';
int y = buf[1] - '1';
// Проверки корректности ввода - например,
if (x < 0 || x > 7 || y < 0 || y > 7) { cerr << "Error!\n"; exit(1); }
Вводите как одно двухсимвольное слово.
#include <iostream>
#include <ctype.h>
using namespace std;
int main()
{
int n = 0;
//cin.peek() это целочисленный тип текущего символа (int_type)
while(!isdigit(char(cin.peek())))
cin.ignore();
cin >> n;
cout << n;
return 0;
}
Если попытаетесь ввести в x не int, cin перейдет в состояние fail. Проверить это можно с помощью
if(!cin)
//Обработка ошибки
Сборка персонального компьютера от Artline: умный выбор для современных пользователей