Abhijit Dare Ответов: 2

Код для игры в камень ножницы бумага


следующий код выводит "draw!" в качестве вывода независимо от того, какие входные данные предоставляет пользователь
пожалуйста, помогите.

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

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>

void main()
{
	clrscr();

	int choice1;
	char choice2[50];
	int compare(const char * ,const char * )   ;        //prototype
	char s[100];
	cout<<"\n\n WELCOME TO STONE PAPER SCISSORS "<<endl<<endl;
	cout<<" enter your choice"<<endl;

	cout<<"\n 1:SCISSORS \n";
	cout<<"\n 2:ROCK \n";
	cout<<"\n 3:PAPER \n";
	cout<<"enter choice number";
	cin>>choice1;

	if(choice1==2)
	{
		cout<<"you have entered Stone!";
		strcpy(s,"ROCK");
	}
	if (choice1==1)
	{
		cout<<"you have entered scissors";
		strcpy(s,"SCISSORS");
	}
	if(choice1==3)
	{
		strcpy(s,"PAPER")  ;
		cout<<"you have entered paper";
	}
	randomize();
	float point =2;
	float compchoice;
	compchoice=random(point);

	if (compchoice<0.37)
	{
		strcpy(choice2,"ROCK")    ;

	}
	else  if(compchoice<0.64)
	{
		strcpy( choice2,"PAPER");
	}
	else
	{
		strcpy(choice2,"SCISSORS");
	}

	cout<<endl;
	cout<<"User Choice="<<s<<endl;
	cout<<"Computer Choice="<<choice2<<endl;
	cout<<s<<"\t"<<"VS"<<"\t"<<choice2<<"="<<" ";

	int p=compare(s,choice2);
	if(p==1)
	{
		cout<<"computer wins";
		if(p==0)
			cout<<"user wins";
		if(p==-1)
			cout<<"draw!";

		getch();
	}
	int compare(const char* s, const char * choice2)
	{
		if(s=="SCISSORS")
		{
			if(choice2=="ROCK")
				return 1;
			else
				return 0;
		}
		else if(s=="ROCK")
		{
			if(choice2=="SCISSORS")

				return 0;
			else
				return 1;

		}
		else if(s=="PAPER")
		{
			if(choice2=="SCISSORS")
				return 1;
			else
				return 0;
		}
		else
		return -1;
	}

[no name]

Я бы посоветовал вам использовать switch case вместо условных операторов (if и else в вашем случае). Установите точки останова и посмотрите, что произойдет, и я думаю, что это почти невозможно с вашим компилятором, поэтому любезно измените свой компилятор.
Я вижу некоторые устаревшие заголовочные файлы, вызовы функций по умолчанию и т. д.,

2 Ответов

Рейтинг:
2

Patrice T

Совет:
Используйте текстовый редактор программиста и используйте indentation
Notepad++ Home[^]
Сделав отступ, который я сделал в вашем вопросе, можно увидеть, что } отсутствует в конце main.

Другая проблема заключается в том, что вы не можете сравнивать массивы символов с оператором ==.

Автор: Альберт Эйнштейн
- Все должно быть как можно проще, но не проще.”

Совет:
Упростите свой код: используйте числа для хранения вариантов и используйте строки только при выводе результата.


Abhijit Dare

тогда как можно сравнивать массивы? помните, что я скопировал массив в переменную s с помощью strcpy() .я сравнил эту переменную с и символьным значением, которое совершенно законно

Patrice T

s также является массивом char, поэтому вы пытаетесь сравнить 2 массива с ==.
Видеть:
ссылка strcmp - C++ [^]

Рейтинг:
1

OriginalGriff

Так что начните с отладчика и попытайтесь выяснить, почему!
Поставьте точку останова на линии:

int p=compare(s,choice2);
И запустите свое приложение в отладчике. Когда он дойдет до этой линии, он остановится и будет ждать, когда вы скажете ему, что делать.
Используйте отладчик, чтобы точно посмотреть, что находится в различных переменных, и точно определить, что должно произойти, когда вы выполняете следующую строку, прежде чем выполнить ее. Он сделал именно то, что вы ожидали? Если да, то переходите к следующему. Если нет, то почему? Что он сделал такого, чего вы не ожидали, или не сделали того, что сделали?

Это навык-предсказуемо называемый отладкой-и, как и все навыки, вы развиваете его только с его помощью. И гораздо проще выучить его в таком простом приложении, как это, чем бегемот в 100 000 строк, написанный кем-то другим! :смеяться:
Так что попробуйте и посмотрите, что вы можете узнать.


Abhijit Dare

можете ли вы предложить лучший редактор c++ с отладчиком?

OriginalGriff

Visual Studio.
Это, вероятно, бесплатно для вас прямо от Microsoft, и это лучшее в мире.