Программа не принимает введенные данные - 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
, которая запускает игровой процесс.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д