0

How can I fill in a double or int array from a single, arbitrarily long, formatted (e.g. space delimited) keyboard line?

For instance:

Enter the elements of the array:
2 32 12.2 4 5 ...

should result in

=> array[0] = 2
=> array[1] = 32 etc.

I know that I can use scanf as follows, but that does not solve my problem, since each element should be entered one by one.

  /* Input data from keyboard into array */

  for (count = 1; count < 13; count++)
  {
      printf("Enter element : %d: ", count);
      scanf("%f", &array[count]);
  }

Thanks.

4

3 回答 3

3

我知道我可以按如下方式使用 scanf ,但这并不能解决我的问题,因为每个元素都应该一个一个地输入。

不,如果您不使用换行符,那将完全正常。


一般来说,避免使用 是一个好主意scanf()——它不是最直观的函数(可以这么说)。如何fgets()在行中使用读取然后使用解析它strtof()

char buf[LINE_MAX];
fgets(buf, sizeof buf, stdin);

char *s = buf, *endp;
int i = 0;
for (i = 0; i < 13; i++) {
    array[i] = strtof(s, &endp);
    s = endp;
}
于 2013-09-11T21:14:31.467 回答
1

您不能拥有一个同时包含intANDdouble值的数组。你可以有一个数组int,或者一个数组double。如果您的输入中可能有任何doubles,您应该只声​​明一个double.

您还必须为数组设置最大大小,并在填充该数量的元素时停止读取。在 C 中,您不能拥有动态大小的数组。如果您确实需要根据值的数量动态更改数据结构,则最好使用链表。

scanf()不是一个很好的工具,因为它不会区分输入末尾的换行符和分隔数字的空格。用于fgets()读取整行,然后sscanf()将其拆分为数组元素。

以下是如何使用数组:

double ary[MAX_ARRAY_SIZE];    // MAX_ARRAY_SIZE being some defined value
char buffer [512];
char* ptr = buffer;
int i = 0;

printf ("Enter your values separated by spaces: ");
fgets (buffer, sizeof (buffer), stdin);

while (i < MAX_ARRAY_SIZE && ptr) {
    sscanf (ptr, "%lf", &ary[i]);
    ptr++;
    i++;
    ptr = strchr(ptr, '\040');
}
于 2013-09-11T22:30:15.280 回答
0

您可以在变量初始化等方面做一些工作。但这会满足您的要求。

#include <ansi_c.h>

int main(void)
{
    char hold[20][10];
    double arr[20];//change size as necessary
    char *buf;
    char *toss;
    int i=-1, j=0;
    buf = malloc(260);
    toss = malloc(260);

    fgets(buf, 260, stdin);
    buf = strtok(buf, " ");
    while(buf)
    {
        strcpy(hold[++i], buf);
        arr[i] = strtod(hold[i], &toss);
        buf = strtok(NULL, " ");
    }

    for(j=0;j<i;j++)
    {
        printf("arr[%d]=%f\n", j, arr[j]);  
    }

    getchar();

    return 0;
}
于 2013-09-11T22:12:55.163 回答