LINUX.ORG.RU

Не могу понять в чём ошибка моего кода, помогите плз!!!

 


0

1

Программа сдаёт по 9 карт 3 игрокам и подсчитывает кол-во последовательностей из 3 карт одного ранга у каждого игрока.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
#define NUM_SUITS 4 //кол-во мастей
#define NUM_RANKS 13 //кол-во рангов

int main() {
	int in_hand[NUM_SUITS][NUM_RANKS] = { 0 };	
	int player1[NUM_RANKS] = { 0 };
	int player2[NUM_RANKS] = { 0 };
	int player3[NUM_RANKS] = { 0 };

	int num_cards = 9, rank, suit;
	//массив со всеми рангами
	const char rank_code[] = { '2', '3', '4', '5', '6', '7', '8', '9', 't', 'j', 'q', 'k', 'a' };
	//массив со всеми мастями
	const char suit_code[] = { '\x05', '\x04', '\x03', '\x06' };
	int i;

	setlocale(LC_CTYPE, "rus");

	/*инициализация генератора случайных чисел*/
	srand(time(NULL)); 
	
	//вывод карт для 1 игрока
	printf_s("Карты 1-го игрока: ");

	
	while (num_cards > 0) {
		suit = rand() % NUM_SUITS;
		rank = rand() % NUM_RANKS;

		
		if (player1[rank] == 0) {
			player1[rank] = 1;
		}
		else player1[rank]++;
		
		//проверка на наличие карты, чтобы одна итаже карта не повторялась
		if (!in_hand[suit][rank]) {			
			in_hand[suit][rank] = 1;
			num_cards--; 
			printf_s("%c%c  ", rank_code[rank], suit_code[suit]); 	//вывод карты		
		}
		
	}

	printf_s("\n\n");
	
	for (i = 0; i < NUM_RANKS; i++) {
		printf_s("%2d", player1[i]);
	}
	
	printf_s("\n\n");

	num_cards = 9;
	
	//вывод карт для 2 игрока
	printf_s("Карты 2-го игрока: ");

	while (num_cards > 0) {
		suit = rand() % NUM_SUITS;
		rank = rand() % NUM_RANKS;

		if (player2[rank] == 0) {
			player2[rank] = 1;
		}
		else player2[rank]++;
	
		
		if (!in_hand[suit][rank]) {			
			in_hand[suit][rank] = 1;
			num_cards--;
			printf_s("%c%c  ", rank_code[rank], suit_code[suit]);
		}
	}

	printf_s("\n\n");

	for (i = 0; i < NUM_RANKS; i++) {
		printf_s("%2d", player2[i]);
	}


	printf_s("\n\n");
	num_cards = 9;
	
	//вывод карт для 3 игрока
	printf_s("Карты 3-го игрока: ");

	while (num_cards > 0) {
		suit = rand() % NUM_SUITS;
		rank = rand() % NUM_RANKS;

		if (player3[rank] == 0) {
			player3[rank] = 1; 
		}
		else player3[rank]++;
		
		
		if (!in_hand[suit][rank]) {			
			in_hand[suit][rank] = 1; 
			num_cards--;
			printf_s("%c%c  ", rank_code[rank], suit_code[suit]);
		}
	}


	printf_s("\n\n");

	for (i = 0; i < NUM_RANKS; i++) {
		printf_s("%2d", player3[i]);
	}


	printf_s("\n");

	return 0;
}

Перемещено shell-script из general



Последнее исправление: shell-script (всего исправлений: 2)

а что не так? (кроме форматирования)

anonymous
()

Вобще не понял этого кода:

	if (player1[rank] == 0) {
		player1[rank] = 1;
	}
	else player1[rank]++;
	
	//проверка на наличие карты, чтобы одна итаже карта не повторялась
	if (!in_hand[suit][rank]) {			
		in_hand[suit][rank] = 1;
		num_cards--; 
		printf_s("%c%c  ", rank_code[rank], suit_code[suit]); 	//вывод карты		

В чём смысл player1[rank] == 0, разве ″0″ не число и его нельзя инткрементировать?

Почему вы сначал подсчитываете player1[rank], а потом проверяете, не выдана ли уже такая карта?

mky ★★★★★
()

setlocale(LC_CTYPE, «rus»);

printf_s

сдается мне, кто-то сайтом ошибся

t184256 ★★★★★
()

Карты надо сдавать либо из пре-shuffled массива, либо пересдавать rand’ы, если она уже in_hand. Это конечно затратнее под конец, но хотя бы с этим разберешься. Сейчас ты сдаешь просто рандомные карты, а не из общей конечной колоды.

while (num_cards > 0) {
  suit = rand() % NUM_SUITS;
  rank = rand() % NUM_RANKS;
  if (in_hand[suit][rank]) continue;
  in_hand[suit][rank] = 1;
  player1[rank]++;
  num_cards--;
}
anonymous
()

Объясни что именно не так работает? Тут искать твою конкретную ошибку это пальцем в небо

Aswed ★★★★★
()
Ответ на: комментарий от kostyarin_

Там можно полное название языка использовать вместо двухбуквенного сокращения:

setlocale(LC_ALL, "English");

Про трёхбуквенные не знаю.

wandrien ★★
()
Ответ на: удаленный комментарий

Какая примитивная провокация! Жди, сейчас все, уязвленные, бросятся помогать тебе

ttnl ★★★★★
()
Ответ на: удаленный комментарий

как покажешь им рил-ворлд код с проблемой

рил-ворлд код

Что, прошу прощения?

theNamelessOne ★★★★★
()

Брось заниматься ерундой. Напиши лучше на си код, который за каждый копипаст херачил бы тебя током с розетки.

crutch_master ★★★★★
()

Программа сдаёт по 9 карт

suit = rand() % NUM_SUITS;
rank = rand() % NUM_RANKS;

nyet. Ne sdayet.

3 игрокам

int player1[NUM_RANKS] = { 0 };
int player2[NUM_RANKS] = { 0 };
int player3[NUM_RANKS] = { 0 };

Что ты будешь делать, когда надо будет сдать 6-и игрокам?

карт

int player1[NUM_RANKS]

Подсказка: от тебя хотят, чтобы ты сношался с указателями. Переделывай всё. Такой код вменяемый препод по си не примет.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Я ж сказал, что давно уже всё исправил, мне лабу решать не нужно было, я эту прогу тогда почти закончил, мне нужно было одно исправление и всё, и я его получил и всё давно исправил

Я не писал же - напишите мне программу, мне лень писать, я тупой

дошло?

Sam123
() автор топика
Ответ на: комментарий от LamerOk

мдаа, с тобой туго конечно , наверное кроме программирования ничего и не знаешь

Sam123
() автор топика
Ответ на: комментарий от Sam123

У тебя нет ни карт, ни игроков, ни решения задачи.
Код - говнище, которое еще и писалось копипастой. Такое постят на говнокод.ру и смеются.
Дошло?

crutch_master ★★★★★
()
Ответ на: комментарий от LamerOk

Не бойся тут все «тупые» и вместе мы сила ! Зато не глупые

anonymous
()
Ответ на: комментарий от crutch_master

У вас много ошибок в этом коде …

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.