有一个NxN大小的矩阵(N是2-10之间的数字)我们可以放下棋子。你只能放一个字段。该程序要求表的大小,然后要求棋子这样的位置。
1.件:B2
2.件:C5
3.件:D2
...
在最后一篇文章之后,用户可以通过输入' x'退出循环。
我的问题是我必须把所有这些数据放到一个这样的数组中:
char position[100] = {B2C5D2}
这是我尝试使用的函数的代码:
char inputPosition(char position[]) {
int i = 0;
do {
printf("%d. piece: ", i+1);
scanf("%s", &position[i]);
i++;
}while(position[i-1]!='x');
return position;
}
输出如下所示:(对于B2C5D2)
BCDx
我不确定我是否应该使用scanf,程序不应该将值x作为参数,但我不知道该怎么做。
编辑:在我的例子中,如果该职位有效,这无关紧要。我还编辑了char位置的最大输入。 (我必须使用的最大变量大约是10)我真正的问题是我无法将每个位置[i]放入一个没有空格的数组中。
答案 0 :(得分:2)
您需要偏移数组中的位置以允许每个条目包含2个字符,因此请使用&position[2*i]
作为scanf()
的参数。
最好告诉你的代码数组有多大,并确保你不会溢出该数组(通过索引结束或接受更多的字符而不是合适的数字)。
一种可能的解决方案是:
#include <stdio.h>
static void inputPosition(int pos_size, char position[pos_size])
{
for (int i = 0; i < pos_size / 2; i++)
{
printf("%d. piece: ", i + 1);
scanf("%2s", &position[2 * i]);
if (position[2 * i] == 'x')
{
position[2 * i] = '\0';
break;
}
}
}
int main(void)
{
char position[21];
inputPosition(sizeof(position), position);
printf("Position: [%s]\n", position);
return 0;
}
样本运行产生:
1. piece: B2
2. piece: C5
3. piece: D2
4. piece: A1
5. piece: E3
6. piece: F8
7. piece: H8
8. piece: A3
9. piece: D4
10. piece: E2
Position: [B2C5D2A1E3F8H8A3D4E2]
提前退出的另一个样本是:
1. piece: B2
2. piece: C5
3. piece: D2
4. piece: x
Position: [B2C5D2]