Шахматная доска: Проверить, есть ли угроза королю - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Формулировка.

На шахматной доске стоят черный король и белые ладья и слон (ладья бьет по горизонтали и вертикали, слон – по диагоналям). Проверить, есть ли угроза королю и если есть, то от кого именно. Позиция каждой шахматной фигуры задается в обычной нотации, например, d7.

Формат входных данных:

[вертикальная позиция короля] [пробел] [горизонтальная позиция короля] [вертикальная позиция ладьи] [горизонтальная позиция ладьи] [вертикальная позиция слона] [горизонтальная позиция слона]. Пример: a1b2c3

Формат выходных данных:

[вертикальная позиция той фигуры, которая бьет короля] [горизонтальная позиция той фигуры, которая бьет короля] [пробел] [вертикальная позиция той фигуры, которая бьет короля] [горизонтальная позиция той фигуры, которая бьет короля]. Фигуры выводятся в порядке их ввода. Если король не бьется ни одной фигурой, то выдается no solution. Пример: b1 c3
// Chess 17.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "russian");
    int gkk, gks, gkl; // Горизонтальные координаты короля, слона и ладьи соответственно
    char vkk, vks, vkl; // Вертикальные координаты короля, слона и ладьи соответственно
    printf ("Пожалуйста введите координаты фигур\n"); //Ввод данных
    printf ("Горизонтальная координата короля: \n");
    scanf ("%d", &gkk);
    printf ("Вертикальная координата короля: \n");
  scanf ("%с", &vkk);   
    printf ("Координаты короля: %d%с\n",gkk,vkk);
    printf ("Горизонтальная координата ладьи: \n");
    scanf ("%d", &gkl);
    printf ("Вертикальная координата ладьи: \n");
    scanf ("%с", &vkl);
    printf ("Координаты ладьи: %d%с\n",gkl,vkl);
    printf ("Горизонтальная координата слона: \n");
    scanf ("%d", &gks);
    printf ("Вертикальная координата слона: \n");
    scanf ("%с", &vks);
    printf ("Координаты слона: %d%с\n",gks,vks);
    _getch ();
    return (0);
}
Подскажите пожалуйста почему такой вариант ввода данных не работает? Когда вводишь цифру в тип int, то все нормально. Но как только нужно вбить вторую координату фигуры и напечатать букву, то вылазит ошибка. При компиляции ошибок нет. Только при работе. Разве я не прав что тут нужен тип char для того чтобы задать координату буквой??

Решение задачи: «Шахматная доска: Проверить, есть ли угроза королю»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
char getChar()
{
    char buff[32];
    scanf( "%31s", buff );
 
    return buff[0];
}
 
int main()
{
        setlocale(LC_ALL, "russian");
        int gkk, gks, gkl;
        char vkk, vks, vkl;
 
        printf ("Please enter coordinates\n");
 
        printf ("King hor: \n");
        scanf ("%d", &gkk);
        printf ("King vert: \n");
        vkk = getChar();
 
        printf ("King: %d%c\n", gkk, vkk);
 
        printf ("Rook hor: \n");
        scanf ("%d", &gkl);
        printf ("Rook vert: \n");
        vkl = getChar();
 
        printf ("Rook: %d%c\n", gkl, vkl);
 
        printf ("Bishop hor: \n");
        scanf ("%d", &gks);
        printf ("Bishop vert: \n");
        vks = getChar();
 
        printf ("Bishop: %d%c\n", gks, vks);
 
        _getch ();
        return (0);
}

Объяснение кода листинга программы

В этом коде происходит следующее:

  1. Считывание координат короля
    • Пользователю предлагается ввести координаты короля (строка King hor: и King vert:).
    • С помощью функции scanf считывается горизонтальная координата короля и сохраняется в переменной gkk.
    • С помощью функции getChar считывается вертикальная координата короля и сохраняется в переменной vkk.
    • С помощью функции printf выводится сообщение с координатами короля (строка King: %d%c\n, gkk, vkk).
  2. Считывание координат ладьи
    • Пользователю предлагается ввести координаты ладьи (строка Rook hor: и Rook vert:).
    • С помощью функции scanf считывается горизонтальная координата ладьи и сохраняется в переменной gkl.
    • С помощью функции getChar считывается вертикальная координата ладьи и сохраняется в переменной vkl.
    • С помощью функции printf выводится сообщение с координатами ладьи (строка Rook: %d%c\n, gkl, vkl).
  3. Считывание координат слона
    • Пользователю предлагается ввести координаты слона (строка Bishop hor: и Bishop vert:).
    • С помощью функции scanf считывается горизонтальная координата слона и сохраняется в переменной gks.
    • С помощью функции getChar считывается вертикальная координата слона и сохраняется в переменной vks.
    • С помощью функции printf выводится сообщение с координатами слона (строка Bishop: %d%c\n, gks, vks).
  4. Вывод сообщения об успешном вводе
    • После ввода всех координат выводится сообщение Successful input.
  5. Ожидание нажатия клавиши
    • С помощью функции _getch программа ожидает нажатия клавиши.
  6. Завершение программы
    • Программа возвращает 0, что означает успешное завершение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы