a_man870 Ответов: 3

Проверить с новыми программирования он не работает правильно.


Я пытаюсь закодировать игру со змеиным водяным пистолетом. Но я всегда получаю 0 или 10 иногда в качестве значения o a в строке № 75.

Что я уже пробовал:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int check(char inp, char comp){
  int a;
  if(inp == 's' && comp == 'w')
  {
    a = 1;
  }
  else if(inp == 'w' && comp == 's')
  {
    a = -1;
  }
   if(inp == 's' && comp == 'g')
  {
    a = -1;
  }
  else if(inp == 'g' && comp == 's')
  {
    a = 1;
  }
   if(inp == 'w' && comp == 'g')
  {
    a = 1;
  }
  else if(inp == 'g' && comp == 'w')
  {
    a = -1;
  }
  if(inp == comp)
  {
    a = 0;
  }
  return a;
  
}

char ran(char comp)
{
  srand(time(0));
  int num = rand()%100;
  //printf("%d", num);

  if(num<33)
  {
    return 'S';
  }
  else if(num<66)
  {
    return 'W';
  }
  else 
  {
    return 'G';
  }
}
int main()
{
 int number,tim, player=0, compu=0, draw=0, a;
 char you,comp;
 

 printf("How many time you want to play the game:\n");
 scanf("%d", &tim);
 
 for(int i=0; i<tim; i++)
 {
    
    comp = ran(comp);
    printf("Enter 'S' for snake, 'w' fro water, 'G' gor gun:\n");
    scanf("%c", &you);
    fflush(stdin);
    //printf("%c\n", comp);
    a= check(you, comp);
    printf("%d", a);
    if(a == 1)
   {
     player++;
     printf("player: %d\n", player);
     printf("computer: %d\n", compu);
     printf("draw: %d\n", draw);
   }
   else if(a == -1)
   {
     compu++;
     printf("player: %d\n", player);
     printf("computer: %d\n", compu);
     printf("draw: %d\n", draw);
   }
   else if(a == 0) 
   {
     draw++;
     printf("player: %d\n", player);
     printf("computer: %d\n", compu);
     printf("draw: %d\n", draw);
   }
 }
 return 0;
}

Rick York

Вы не можете произнести слово "пожалуйста"по буквам?

Тогда все в порядке.

OriginalGriff

Yoofz 2da ... :вздох:

Rick York

Извините - никакой Хабльской тарабарщины.

Richard MacCutchan

Вы должны начать с использования последовательного корпуса букв. Используйте все прописные или все нижние буквы, а не случайную смесь, которая у вас есть в данный момент. Также необходимо добавить код на случай, когда пользователь не вводит допустимую букву.

3 Ответов

Рейтинг:
2

OriginalGriff

Первое, что нужно сделать, это научиться использовать отладчик. Он покажет вам, что именно происходит с вашим кодом во время его выполнения, и поможет вам в значительной степени разобраться в проблеме.

Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поставьте точку останова в первой строке таблицы. check выполните функцию и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!

Однако я дам вам подсказку: посмотрите внимательно на структуру check - ты хотел, чтобы это выглядело так:

if(...) ...
else if(...) ...

if(...) ...
else if(...) ...

if(...) ...
else if(...) ...

if(...) ...
return a;
Или вот так:
if(...) ...
else if(...) ...
else if(...) ...
else if(...) ...
else if(...) ...
else if(...) ...
else if(...) ...
else ...
return a;
Я предполагаю последнее ...


Рейтинг:
1

KarstenK

Перед использованием отладчика вы должны очистить свой код, купить использование структуры для данных и какой-то функции, например для вывода. Затем внимательно проверьте свой код и пишите дальше ВСЕ если окончание другое предложение с некоторым выходом.

struct GameData {
  bool isSnake;
  bool isWater;
  char draw; 
} data;

int check(GameData &data);// use reference syntax
void printOut(GameData &data);// use reference syntax

И использование отладчика-это лучшая идея, чтобы увидеть, как работает ваш код.


Рейтинг:
1

Patrice T

Цитата:
Я пытаюсь закодировать игру со змеиным водяным пистолетом. Но я всегда получаю 0 или 10 иногда в качестве значения o a в строке № 75.

Вы знаете, что программа должна делать и как, А как насчет того, чтобы посмотреть, как она работает с отладчиком ?
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.