我将数组传递给函数straightflush。我使用计数循环,所以我可以得到所有的元素,但由于某种原因,即使计数器我增加,我得到的值,适合数组的第一个元素。因此,只有我的spadesCount增加,因为它总是显示4的值和诉讼的铲子。
struct card{
int value;
char suit;
};
int straightflush(struct card hand[], int n)
{
int clubsCount = 0;
int diamondsCount = 0;
int heartCount = 0;
int spadesCount =0;
int i;
for(i=0; i<n; i++)
{
if (hand[i].suit == 'c')
{
clubsCount++;
}
else if (hand[i].suit == 'd')
{
diamondsCount++;
}
else if (hand[i].suit == 'h')
{
heartCount++;
}
else{
spadesCount++;
}
}
return 0;
}
这是我的主要内容:
int main(){
struct card hand1[] = {{4,'s'}, {9,'s'},{12,'c'},{11,'s'},{8,'s'},
{6,'d'}, {3,'d'},{7,'s'},{10,'s'},{12,'d'}};
printf ("%d\n", straightflush(hand1, 10));
}
答案 0 :(得分:4)
我只是运行你的代码,四个计数变量都有正确的值。我认为这是因为你在straightflush
函数结束时返回0,输出总是为0.
答案 1 :(得分:1)
您可以使用调试器或在straightflush()中的return语句之前添加以下行,以证明您的计数实际上是准确的。
printf("%d %d %d %d\n", clubsCount, diamondsCount, heartCount, spadesCount);
您的返回值与您读取的值无关,因此main()函数中的printf语句不打印任何内容的计数,无论如何都只是打印0。
如果您希望在striaghtflush()之外访问计数,则需要对这些计数使用全局变量(通常是一种避免的想法),或者通过引用传递一些值。这方面的一个例子是:
#include <stdio.h>
#include <stdlib.h>
void editValues( int *numDiamonds, int *numClubs, int *numHearts, int *numSpades ){
*numDiamonds = 3;
*numClubs = 5;
*numHearts = 7;
*numSpades = 11;
}
int main(int argc,char**argv)
{
int numD=0, numC=1, numH=2, numS=3;
printf("%d %d %d %d\n", numD, numC, numH, numS);
editValues(&numD, &numC, &numH, &numS);
printf("%d %d %d %d\n", numD, numC, numH, numS);
return 0;
}