2014-05-04 80 views
0

我知道这看起来可能是一个很小的问题,但我现在非常困惑。有没有办法将用户的值接受到数组中,而不必每次都输入?如何在没有按下的情况下填充阵列输入for循环

如果接受的值的数量是3,那么用户可以输入值作为5 25 45并按Enter键,并将其作为三个单独的值存储在数组中。

我正在试图用for循环来做这件事,但它只接受下一个值,一旦我输入。

+0

请分享您实现迄今为止你做? –

+1

'if(scanf(“%d%d%d”,&v1,&v2,&v3)!= 3)/ * error * /;'将接受3个类型为int的值,每个值之间有进入或空格或制表符数。 – pmg

+0

@pmg它会这样做,但是如果在另一个测试用例中用户想输入5个值,那么呢?每次我都必须硬编码。 – anshdeb

回答

1

您必须将该行保存为字符串,然后使用不同的函数对其进行解析(将其分开)。你应该能够看到如何做到这一点。尝试谷歌搜索“解析字符串C”或沿着这些线。

编辑:pmg的解决方案要简单得多,并为您的目的工作。我会用它。

1

使用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:快速尝试使其更清晰。

+0

我不太明白这是什么。你能解释一下吗?谢谢 – anshdeb

6

这工作

#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; 
} 
相关问题