有一个 NxN 大小的矩阵(N 是 2-10 之间的数字),我们可以在其中放置棋子。您只能放置一个字段中的一个。程序会询问 table 的大小,然后像这样询问棋子的位置。
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 作为参数获取,但我不知道该怎么做。
编辑:在我的示例中位置是否有效并不重要。我还编辑了字符位置的最大输入。 (我必须使用的最大变量大约是 10 个)我真正的问题是我不能将每个位置 [i] 放入一个没有空格的数组中。
最佳答案
您需要偏移数组中的位置以允许每个条目有 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]
关于c - 如何扫描多个值并添加到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528541/