Программа не принимает введенные данные - C (СИ)

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

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

Здравствуйте, не могу понять почему программа не видит "scanf(%c,&stlb_sim)" в строке 5
Koordinati_stlb(char *koord_stlb){
    char stlb_sim;
    int stlb;
    printf("\nВведите столбец: ");
    scanf("%c",&stlb_sim);
    int t,t1=0;
    while(t1!=1){
        for(t=0;t<20;t++){
            if(stlb_sim==koord_stlb[t])t1=1;
        }
        if(t1==1)break;
        if(t1==0){
            printf("Вы ввели некорректные координаты!\n");
            printf("Попробуйте еще раз: ");
            scanf("%c",&stlb_sim);
        }
    }
    
    stlb=CheckSim(stlb_sim);
    
    stlb+=4;
    return stlb;
}

Решение задачи: «Программа не принимает введенные данные»

textual
Листинг программы
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include <Windows.h>
 
const int ln=13, col=14;
 
CheckSim(char stlb_sim){    //переводим символы "А-К и а-к" в "1-10"
    int ans;
    if(stlb_sim=='а' || stlb_sim=='А'){ans=0;return ans;}
    if(stlb_sim=='б' || stlb_sim=='Б'){ans=1;return ans;}
    if(stlb_sim=='в' || stlb_sim=='В'){ans=2;return ans;}
    if(stlb_sim=='г' || stlb_sim=='Г'){ans=3;return ans;}
    if(stlb_sim=='д' || stlb_sim=='Д'){ans=4;return ans;}
    if(stlb_sim=='е' || stlb_sim=='Е'){ans=5;return ans;}
    if(stlb_sim=='ж' || stlb_sim=='Ж'){ans=6;return ans;}
    if(stlb_sim=='з' || stlb_sim=='З'){ans=7;return ans;}
    if(stlb_sim=='и' || stlb_sim=='И'){ans=8;return ans;}
    if(stlb_sim=='к' || stlb_sim=='К'){ans=9;return ans;}
}
 
draw_map(char map[ln][col]){    //рисуем карту
    int i, j;
    for(i=0;i<13;i++){
        for(j=0;j<14;j++){
            printf("%c",map[i][j]);
        }
    printf("\n");
    }
}
 
initializat_map(char map1[ln][col]){    //инициализируем карту
    int i, j;
    char map[13][14]={
        {"   АБВГДЕЖЗИК "},
        {"   ---------- "},
        {"1 |          |"},
        {"2 |          |"},
        {"3 |          |"},
        {"4 |          |"},
        {"5 |          |"},
        {"6 |          |"},
        {"7 |          |"},
        {"8 |          |"},
        {"9 |          |"},
        {"10|          |"},
        {"   ---------- "}};
    for(i=0;i<ln;i++){
        for(j=0;j<col;j++){
            map1[i][j]=map[i][j];
        }
    }
}
 
main(){
    char map1[13][14];
    initializat_map(map1);
    player1(map1);
}
 
player1(char map1[ln][col]){
 
    positioned_Battleships_1(map1);
    
}
 
positioned_Battleships_1(char map[ln][col]){    //располагаем одинарные корабли
    int palubs=1, ships=4;
    positioned_palub(map,palubs,ships);
    
}
 
positioned_palub(char map[ln][col],int palubs, int ships){  //располагаем корабли
    char koord_stlb[] = {"абвгдежзикАБВГДЕЖЗИК"},choose;    //20-символов
    int hod=-1, str, stlb;
    int kol=0, plb=ships;
    while(ships>0){ //колличество расролаженных кораблей
        palubs=1;
        while(palubs>0){    //колличество расролаженных палуб
            while(hod==-1){ //правильность всех введенных координат
                hod=1;
                system("cls");
            
                draw_map(map);
                printf("Введите корректные координаты\n");
                str=Koordinati_str();
                stlb=Koordinati_stlb(koord_stlb);
 
                hod=Check_koord_korablya(str,stlb,map,koord_stlb);
 
                hod=Check_koord_near(str,stlb,map);
                
                if(hod==1)map[str][stlb]='в–*';
            }
            kol++;
            palubs--;
        }
        ships--;
    }
}
 
Koordinati_str(){   //задаем координаты коробля в строке
    int str;
    printf("\nВведите №-строки: ");
    scanf("%i",&str);
    while(str<1 || str>10){
        printf("\nВведите от 1 до 10\n");
        scanf("%i",&str);
    }
    str+=3;//подстраиваем координаты под карту
    return str;
}
Koordinati_stlb(char *koord_stlb){  //задаем координаты коробля в столбце
    char stlb_sim;
    int stlb;
    printf("\nВведите столбец: ");
    scanf("%c",&stlb_sim);
    int t,t1=0;
    while(t1!=1){
        for(t=0;t<20;t++){
            if(stlb_sim==koord_stlb[t])t1=1;
        }
        if(t1==1)break;
        if(t1==0){
            printf("Вы ввели некорректные координаты!\n");
            printf("Попробуйте еще раз: ");
            scanf("%c",&stlb_sim);
        }
    }
    
    stlb=CheckSim(stlb_sim);
    
    stlb+=4;//подстраиваем координаты под карту
    return stlb;
}
Check_koord_korablya(int str, int stlb, char map[ln][col], char *koord_stlb){   //проверяем координаты корабля(расположен ли корабль правильно)
    while(map[str][stlb]=='в–*'){//поль-ль ввел те же координаты
        return -1;
    }
    return 1;
}
Check_koord_near(int str, int stlb, char map[ln][col]){
    while(map[str++][stlb]=='в–*' ||    
          map[str--][stlb]=='в–*' ||    
          map[str][stlb++]=='в–*' ||    
          map[str][stlb--]=='в–*' ||    
          map[str--][stlb--]=='в–*' ||
          map[str--][stlb++]=='в–*' ||
          map[str++][stlb++]=='в–*' ||
          map[str++][stlb--]=='в–*'
          ){
            printf("Рядом с вашими коорд. распологается корабль\n");
            return -1;
          }
         return 1;
}

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

  1. В функции CheckSim происходит перевод символов А-К и а-к в 1-10. Это необходимо для удобства работы с координатами в программе.
  2. В функции draw_map происходит вывод карты на экран. Карта представлена в виде двумерного массива символов map[ln][col]. Каждый символ map[i][j] соответствует определенной ячейке на карте.
  3. В функции initializat_map инициализируется карта. Сначала объявляется двумерный массив map[ln][col] размером 13x14. Затем этот массив инициализируется значениями из строки, которая представляет собой карту.
  4. В функции player1 происходит основной игровой процесс. Сначала вызывается функция positioned_Battleships_1, которая располагает одинарные корабли на карте.
  5. В функции positioned_palub располагаются корабли на карте. Этот процесс состоит из нескольких этапов. Сначала задаются координаты корабля в строке и столбце с помощью функций Koordinati_str и Koordinati_stlb. Затем проверяется, правильно ли введены координаты, и если нет, то пользователю предлагается ввести корректные координаты. После этого проверяется, не расположен ли корабль рядом с уже размещенными кораблями. Если все проверки пройдены успешно, корабль размещается на карте.
  6. В функции main создается экземпляр двумерного массива map1[ln][col] и инициализируется с помощью функции initializat_map. Затем вызывается функция player1, которая запускает игровой процесс.

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


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

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

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