C中计数和计数位的输出不正确

时间:2015-08-26 00:41:46

标签: c arrays loops bits

这只是我的第二个编程课程。有30个房间。我们必须看看每个房间里的东西并计算它。我已经使用for循环来通过30个房间,我知道我已经尝试使用位计数器来查看每个房间的内容。重定向样本输出后,我没有得到正确的样本输出。当我printf("%d", itemCnt[loc]);时,我的输出是774778414trolls

当我printf("%d", itemCnt[0]);时,我的输出是0trolls。我只想尝试一个输出,这样我就可以弄清楚如何获得其余的8个输出。从样本输出中,第一个数字应该是6,然后是6,1,4,4 ......依此类推。下面是示例输入/输出以及我目前在代码中的内容。

示例输入:

1   20  @@
2   21  @A
3   22  @#
4   23  @1
5   22  @@
6   22  @@
7   22  @@
8   22  @@
9   23  @Z  Here be trolls � not!
10  23  @+
12  23  @@
13  24  @@
11  22  @@
14  22  @2
15  21  @1
16  20  @@
17  19  @@
18  20  @@
19  19  @@
20  18  @@
21  17  @*
22  16  @*
23  15  @%
0   14  @7
0   gold_bar
1   silver_bar
2   diamond
3   copper_ring
4   jumpy_troll
5   air
6   angry_troll
7   plutonium_troll

示例输出:

6   gold_bar
6   silver_bar
1   diamond
4   copper_ring
4   jumpy_troll
8   air
15  angry_troll
0   plutonium_troll

int main()
{
    // contains x and y coordinate
    int first, second;
    char third[100];
    char fourth[100];
    char Map[30][30];

    // map initialization
    for(int x=0; x<30; x++){
        for(int y=0; y<30; y++){
            Map[x][y] = '.';
        }
    }

    while(scanf("%d %d %s",&first, &second, third) != -1) {
        // Condition 1: a zero coordinate
        if (first==0 || second==0) exit(0);
        // Condition 2: coordinate out of range
        if (first<0 || first>30 || second<0 || second>30){
            printf("Error: out of range 0-30!\n");
            exit(1);
        }


        Map[second-1][first-1] = third[1];
        fgets(fourth, 100, stdin);

        // bit counter
        int itemCnt[8] = {0};         // array to hold count of items, index is item type
        unsigned char test;           // holds contents of room.
        int loc;
        for(loc = 0; loc < 8; loc++)  // loop over every bit and see if it is set
        {
            unsigned char bitPos = 1 << loc;  // generate a bit-mask
            if((test & bitPos) == bitPos)
                ++itemCnt[loc];
        }
        // print the map
        for(int h=0; h<30; h++){
            for(int v=0; v<30; v++){
                printf("%c", Map[h][v]);
            }
            printf("\n");
            }
        // print values
        printf("%d", itemCnt[0]);

    }

    return 0;
}

0 个答案:

没有答案