【发布时间】:2014-06-27 11:58:06
【问题描述】:
我正在尝试制作一个“Truco”游戏,但它处于起步阶段,但我对 C 语言没有太多经验。
我正在尝试创建一个函数,它接收一个 char(字符串)数组并返回另一个 char 数组。
我在编译代码时收到以下错误:
276 [Warning] passing arg 1 of `retornaMaior' from incompatible pointer type
以下是代码的相关部分:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
// const
char cartas_jogo[] = "4567QJKA23";
char naipes_jogo[] = "ZCEO";
int retornaIndice(char carta)
{
int a = 0;
int retorno = 0;
for (a=0; a<strlen(cartas_jogo); a++)
{
if (carta==cartas_jogo[a])
{
retorno = a;
}
}
return retorno;
}
char *retornaMaior(char *cartas, const char carta_comp)
{
int posCartaComp = retornaIndice(carta_comp);
int a = 0;
int posMaior = 0;
int tem = 0;
int posA = 0;
for (a=0; a<6; a+=2)
{
int posCarta = retornaIndice(cartas[a]);
if (tem == 0)
{
if (posCarta>posCartaComp)
{
posMaior = posCarta;
posA = a;
tem = 1;
}
}
else
{
if (posCarta<posMaior)
{
if (posCarta>posCartaComp)
{
posMaior = posCarta;
posA = a;
}
}
}
}
char *carta = "YY";
carta[0] = cartas_jogo[posMaior];
a++;
carta[1] = cartas[posA];
return carta;
}
int main()
{
char carta_jogada[3];
printf("\n\nDigite uma de suas cartas para jogar: ");
scanf("%s", &carta_jogada);
// conferir length carta jogada
// conferir se tem carta jogada
char mesa_jog1[] = {'Y','Y','\0'};
mesa_jog1[0] = carta_jogada[0];
mesa_jog1[1] = carta_jogada[1];
char jog2_carta1[] = {'Q','C','\0'};
char cartas[7];
cartas[0] = jog2_carta1[0];
cartas[1] = jog2_carta1[1];
cartas[2] = jog2_carta2[0];
cartas[3] = jog2_carta2[1];
cartas[4] = jog2_carta3[0];
cartas[5] = jog2_carta3[1];
cartas[6] = '\0';
printf("%s", retornaMaior(&cartas,mesa_jog1[0]));
getch();
}
这是代码的一小部分,但我认为这已经足够你们帮助我了。
【问题讨论】:
-
在对
retornaMaior(&cartas,mesa_jog1[0])的调用中松开&应该是retornaMaior(cartas,mesa_jog1[0]) -
当我这样做时,编译器没有显示错误,但是当我输入一个值时它停止工作......
-
请注意
cartsas在 main 中分配了堆内存与char *carta='YY';和后面的几行不同。您正在分配一个字符串文字,然后尝试返回它。有你的错误。