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