【问题标题】:How to scanf multiple values and add to an array?如何扫描多个值并添加到数组中?
【发布时间】:2017-01-08 01:36:51
【问题描述】:

有一个 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 作为参数,但我不知道该怎么做。

编辑:在我的示例中,职位是否有效都没有关系。我还编辑了字符位置的最大输入。 (我必须使用的最大变量约为 10)我真正的问题是我不能将每个位置 [i] 放入一个没有空格的数组中。

【问题讨论】:

  • 你不需要读到&position[2 * i]吗?并且您只能在 20 个字符的数组中存储 9 个位置,除非您使用 " %2c" 代替 %s。对于该位置,您仍然没有包含 10 对字符的以空字符结尾的字符串。您也没有检查职位是否有效。

标签: c arrays scanf


【解决方案1】:

您需要偏移数组中的位置以允许每个条目包含 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]

【讨论】:

  • 非常感谢乔纳森,你真的帮了我大忙!
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 2014-10-11
  • 2013-11-05
  • 2014-09-11
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多