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