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