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

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

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

Здравствуйте, не могу понять почему программа не видит "scanf(%c,&stlb_sim)" в строке 5
Листинг программы
  1. Koordinati_stlb(char *koord_stlb){
  2. char stlb_sim;
  3. int stlb;
  4. printf("\nВведите столбец: ");
  5. scanf("%c",&stlb_sim);
  6. int t,t1=0;
  7. while(t1!=1){
  8. for(t=0;t<20;t++){
  9. if(stlb_sim==koord_stlb[t])t1=1;
  10. }
  11. if(t1==1)break;
  12. if(t1==0){
  13. printf("Вы ввели некорректные координаты!\n");
  14. printf("Попробуйте еще раз: ");
  15. scanf("%c",&stlb_sim);
  16. }
  17. }
  18. stlb=CheckSim(stlb_sim);
  19. stlb+=4;
  20. return stlb;
  21. }

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

textual
Листинг программы
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "math.h"
  4. #include <Windows.h>
  5.  
  6. const int ln=13, col=14;
  7.  
  8. CheckSim(char stlb_sim){    //переводим символы "А-К и а-к" в "1-10"
  9.     int ans;
  10.     if(stlb_sim=='а' || stlb_sim=='А'){ans=0;return ans;}
  11.     if(stlb_sim=='б' || stlb_sim=='Б'){ans=1;return ans;}
  12.     if(stlb_sim=='в' || stlb_sim=='В'){ans=2;return ans;}
  13.     if(stlb_sim=='г' || stlb_sim=='Г'){ans=3;return ans;}
  14.     if(stlb_sim=='д' || stlb_sim=='Д'){ans=4;return ans;}
  15.     if(stlb_sim=='е' || stlb_sim=='Е'){ans=5;return ans;}
  16.     if(stlb_sim=='ж' || stlb_sim=='Ж'){ans=6;return ans;}
  17.     if(stlb_sim=='з' || stlb_sim=='З'){ans=7;return ans;}
  18.     if(stlb_sim=='и' || stlb_sim=='И'){ans=8;return ans;}
  19.     if(stlb_sim=='к' || stlb_sim=='К'){ans=9;return ans;}
  20. }
  21.  
  22. draw_map(char map[ln][col]){    //рисуем карту
  23.     int i, j;
  24.     for(i=0;i<13;i++){
  25.         for(j=0;j<14;j++){
  26.             printf("%c",map[i][j]);
  27.         }
  28.     printf("\n");
  29.     }
  30. }
  31.  
  32. initializat_map(char map1[ln][col]){    //инициализируем карту
  33.     int i, j;
  34.     char map[13][14]={
  35.         {"   АБВГДЕЖЗИК "},
  36.         {"   ---------- "},
  37.         {"1 |          |"},
  38.         {"2 |          |"},
  39.         {"3 |          |"},
  40.         {"4 |          |"},
  41.         {"5 |          |"},
  42.         {"6 |          |"},
  43.         {"7 |          |"},
  44.         {"8 |          |"},
  45.         {"9 |          |"},
  46.         {"10|          |"},
  47.         {"   ---------- "}};
  48.     for(i=0;i<ln;i++){
  49.         for(j=0;j<col;j++){
  50.             map1[i][j]=map[i][j];
  51.         }
  52.     }
  53. }
  54.  
  55. main(){
  56.     char map1[13][14];
  57.     initializat_map(map1);
  58.     player1(map1);
  59. }
  60.  
  61. player1(char map1[ln][col]){
  62.  
  63.     positioned_Battleships_1(map1);
  64.    
  65. }
  66.  
  67. positioned_Battleships_1(char map[ln][col]){    //располагаем одинарные корабли
  68.     int palubs=1, ships=4;
  69.     positioned_palub(map,palubs,ships);
  70.    
  71. }
  72.  
  73. positioned_palub(char map[ln][col],int palubs, int ships){  //располагаем корабли
  74.     char koord_stlb[] = {"абвгдежзикАБВГДЕЖЗИК"},choose;    //20-символов
  75.     int hod=-1, str, stlb;
  76.     int kol=0, plb=ships;
  77.     while(ships>0){ //колличество расролаженных кораблей
  78.         palubs=1;
  79.         while(palubs>0){    //колличество расролаженных палуб
  80.             while(hod==-1){ //правильность всех введенных координат
  81.                 hod=1;
  82.                 system("cls");
  83.            
  84.                 draw_map(map);
  85.                 printf("Введите корректные координаты\n");
  86.                 str=Koordinati_str();
  87.                 stlb=Koordinati_stlb(koord_stlb);
  88.  
  89.                 hod=Check_koord_korablya(str,stlb,map,koord_stlb);
  90.  
  91.                 hod=Check_koord_near(str,stlb,map);
  92.                
  93.                 if(hod==1)map[str][stlb]='в–*';
  94.             }
  95.             kol++;
  96.             palubs--;
  97.         }
  98.         ships--;
  99.     }
  100. }
  101.  
  102. Koordinati_str(){   //задаем координаты коробля в строке
  103.     int str;
  104.     printf("\nВведите №-строки: ");
  105.     scanf("%i",&str);
  106.     while(str<1 || str>10){
  107.         printf("\nВведите от 1 до 10\n");
  108.         scanf("%i",&str);
  109.     }
  110.     str+=3;//подстраиваем координаты под карту
  111.     return str;
  112. }
  113. Koordinati_stlb(char *koord_stlb){  //задаем координаты коробля в столбце
  114.     char stlb_sim;
  115.     int stlb;
  116.     printf("\nВведите столбец: ");
  117.     scanf("%c",&stlb_sim);
  118.     int t,t1=0;
  119.     while(t1!=1){
  120.         for(t=0;t<20;t++){
  121.             if(stlb_sim==koord_stlb[t])t1=1;
  122.         }
  123.         if(t1==1)break;
  124.         if(t1==0){
  125.             printf("Вы ввели некорректные координаты!\n");
  126.             printf("Попробуйте еще раз: ");
  127.             scanf("%c",&stlb_sim);
  128.         }
  129.     }
  130.    
  131.     stlb=CheckSim(stlb_sim);
  132.    
  133.     stlb+=4;//подстраиваем координаты под карту
  134.     return stlb;
  135. }
  136. Check_koord_korablya(int str, int stlb, char map[ln][col], char *koord_stlb){   //проверяем координаты корабля(расположен ли корабль правильно)
  137.     while(map[str][stlb]=='в–*'){//поль-ль ввел те же координаты
  138.         return -1;
  139.     }
  140.     return 1;
  141. }
  142. Check_koord_near(int str, int stlb, char map[ln][col]){
  143.     while(map[str++][stlb]=='в–*' ||   
  144.           map[str--][stlb]=='в–*' ||   
  145.           map[str][stlb++]=='в–*' ||   
  146.           map[str][stlb--]=='в–*' ||   
  147.           map[str--][stlb--]=='в–*' ||
  148.           map[str--][stlb++]=='в–*' ||
  149.           map[str++][stlb++]=='в–*' ||
  150.           map[str++][stlb--]=='в–*'
  151.           ){
  152.             printf("Рядом с вашими коорд. распологается корабль\n");
  153.             return -1;
  154.           }
  155.          return 1;
  156. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы