访问struct数组中的值

时间:2014-11-26 02:13:38

标签: c arrays struct

我将数组传递给函数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));
}

2 个答案:

答案 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;
}