我知道这看起来可能是一个很小的问题,但我现在非常困惑。有没有办法将用户的值接受到数组中,而不必每次都输入?如何在没有按下的情况下填充阵列输入for循环
如果接受的值的数量是3
,那么用户可以输入值作为5 25 45
并按Enter键,并将其作为三个单独的值存储在数组中。
我正在试图用for循环来做这件事,但它只接受下一个值,一旦我输入。
我知道这看起来可能是一个很小的问题,但我现在非常困惑。有没有办法将用户的值接受到数组中,而不必每次都输入?如何在没有按下的情况下填充阵列输入for循环
如果接受的值的数量是3
,那么用户可以输入值作为5 25 45
并按Enter键,并将其作为三个单独的值存储在数组中。
我正在试图用for循环来做这件事,但它只接受下一个值,一旦我输入。
您必须将该行保存为字符串,然后使用不同的函数对其进行解析(将其分开)。你应该能够看到如何做到这一点。尝试谷歌搜索“解析字符串C”或沿着这些线。
编辑:pmg的解决方案要简单得多,并为您的目的工作。我会用它。
使用strtok!
请记住包含string.h。
CharArrayToMatch在这种情况下是来自用户的输入字符串。 为了举例说吧是“1 2 3 4 5”。
{1}将得到第一个数字-1并使strtok“准备就绪”以读取字符串的其余部分。
{2}打印当前令牌 - 将其替换为您想要执行的任何操作。
{3}只要这不返回NULL,就有更多的令牌要处理。
当我们进入循环时,我们先打印1,然后得到下一个数字:2,把它放到tmp中,然后用其他数字重复这个过程。 5之后,strtok将返回NULL,我们将退出循环。
// We split on spaces and get the pointer to the first token
char *tmp = strtok(CharArrayToMatch, " "); // {1}
while (tmp != NULL) {
// do whatever action you want to do instead of this - for instance: atoi!
printf("%s\n", tmp); // {2}
// Get the next token
tmp = strtok(NULL, " "); // {3}
}
编辑#1:添加了几条评论。
编辑#2:请注意,这个解决方案实际上处理一个通用数量的输入。
编辑#3:快速尝试使其更清晰。
我不太明白这是什么。你能解释一下吗?谢谢 – anshdeb
这工作
#include <stdio.h>
int main(void) {
int array[10];
printf("Enter 10 values separated by whitespace (enter, space, tab, ...)\n");
for (int k = 0; k < 10; k++) {
if (scanf("%d", array + k) != 1) /* error */;
}
return 0;
}
请分享您实现迄今为止你做? –
'if(scanf(“%d%d%d”,&v1,&v2,&v3)!= 3)/ * error * /;'将接受3个类型为int的值,每个值之间有进入或空格或制表符数。 – pmg
@pmg它会这样做,但是如果在另一个测试用例中用户想输入5个值,那么呢?每次我都必须硬编码。 – anshdeb