c - 如何扫描多个值并添加到数组?

标签 c arrays scanf

有一个 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/

相关文章:

c - c 中的除法没有给出预期值

c - 用于数组和标量的 Fortran 到 C 接口(interface)

c - printf() 与 scanf() 在同一行

c - 我正在尝试有条件地扫描数据,只要它不是 C 中文件的末尾

c - printf 输出在 scanf 之后被 "\n"破坏

c - 我怎么用错了getchar()?

c - C 中的生产者消费者程序 - 段错误(核心转储)

C 2D Arrays 通过移动其下方的行来删除某些预定行

c# - 使用 Linq 组合数据

javascript - 如何使用对象元素可用的最低可能序列更新数组中的对象元素?