我想采用逗号分隔的整数并将它们放在一个数组中,该数组以 C 中数组末尾的问号结尾

I want to take comma-separated integers and place them in an array that terminates with a question mark at the end of the array in C

这里是菜鸟。我试图接受逗号分隔的整数并将它们放在一个以(并包含)问号结尾的数组中。输入 必须 有一个逗号,但是当我输入时它似乎不需要它。到目前为止我有:

    char Array1[100];
    int i;
    do {
        scanf("%d,\n", &Array[i]) {
        i++;
    } while (Array[i] != '?');
}

我想我想说的是我想让每个数字输入都需要分隔符 (,)(最后一个数字必须以问号结尾)但是 scanf似乎刚好超过了这个要求。

代码中存在多个问题。

  • 您不检查数组边界:输入超过 100 个数字后跟一个逗号会导致未定义的行为
  • 测试Array[i] != '?'在很多层面上都是错误的:数字后面的字符没有存储到数组中,数字被转换所以测试'?'意味着测试数字是否恰好是63, ? 的 ASCII 代码,测试使用数组中的下一个条目,其内容未初始化,也调用未定义的行为。
  • scanf 格式字符串中的尾随 \n 将导致 scanf() 继续从用户读取,直到在 [= 之后读取非白色 space 字符17=] 消耗和丢弃和换行。

您应该使用更简单的循环,读取数字和分隔符并显式测试分隔符:

    char Array[100];
    int i = 0;
    char c;
    while (i < 100) {
        if (scanf("%d%c", &Array[i], &c) != 2)
            break;
        i++;
        if (c == ',')
            continue;
        if (c == '?')
            break;
        printf("invalid separator: %c\n", c);
        break;
    }