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

时间:2017-01-08 01:36:52

标签: c arrays scanf

有一个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]放入一个没有空格的数组中。

1 个答案:

答案 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]