这只是我的第二个编程课程。有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;
}