将用逗号分隔的数字的用户输入放入数组中?

时间:2018-05-10 11:41:05

标签: c arrays

我从用户那里接收10个号码(用户在提示时输入它们,并且数字用逗号分隔,如下:245645,-243,4245)。如何将这些元素放入数组中?如下所示,我使用了scanf,但这并不像我希望的那样有效。任何建议将不胜感激。

//User will pass ten numbers, separated by commas. This is to be put into an array.

#include <stdio.h>

int main () 
{
    int A[10]; // array to contain in users input.
    printf("Enter your numbers: ");
    scanf("%d", &A[10]);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

您必须在scanf中使用逗号:

for(int i=0; i<10; i++) {        /* for each element in A */
  if(0==scanf("%d,", &A[i])) {    /* read a number from stdin into A[i] and then consume a commma (if any) */
    break;                       /* if no digit was read, user entered less than 10 numbers separated by commas */
    /* alternatively error handling if fewer than 10 is illegal */
  }
}

答案 1 :(得分:0)

我不会为你写整件事。 但我绝对可以提供帮助。 其中一种方法是:

  1. 获取一个包含10个以逗号分隔的数字的字符串:fgets()可能是?
  2. 验证字符串,修剪白色空格,让生活更轻松
  3. 从字符串中挑选一个数字:strtol()可能是?
  4. 在字符串中搜索','个字符,并在',' strchr()之后设置指向下一个索引的指针?
  5. 重复步骤3和4共10次(从这里,实际上9次)
  6. 打印数字
  7. 以下代码可以完成一半的工作。唯一剩下的部分是从用户获取字符串并验证它。 预先声明和初始化字符串的意图是更加强调对初学者来说很复杂的数据的实际解析(没有冒犯)。

    在我们查看下面的代码之前,我们先阅读一些内容。

    • 您可能需要查看strtol()功能
    • 的手册页
    • 您可能需要查看fgets()函数的手册页,该手册未在下面的代码中使用,但您最终可能会使用它来实现步骤1.

    我已经承认这可能不是实现它的最佳方式,我很乐意同意下面的代码可以通过添加各种错误检查以千种方式变得更好,但我留给你探索并实施。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main(void) 
    {
        int i = 0, j = 0;
        char *Str = "1,11,21,1211,111221,312211,1234,4321,123,789";
        char *ptr;
        long ret;
        long array[10] = { [0 ... 9] = 0 };
    
        // So, lets assume step 1 and 2 are taken care of.
    
        // Iterate though the data for 10 times
        for(i = 0; i < 10; i++)
        {
            ret = strtol(Str, &ptr, 10);
            // Check if its a number
            if(ret != 0)
            {
                // Its is a number!
                // Put it in the array
                array[j] = ret;
                // Increment the index so that next number will not over-write the existing one
                j++;
                // Find the next ',' in the string  
                Str = strchr(Str, ',');
                if(Str == NULL)
                {
                    // Handle this condition that there are no more commas in the string! 
                    break;
                }
                // Assuming that the ',' is found, increment the pointer to index next to ','
                Str++;
            }
        }
    
        // Print the array
        for(i = 0; i < j; i++)
            printf("%ld\n", array[i]);
    }
    

    这将打印以下输出:

    1
    11
    21
    1211
    111221
    312211
    1234
    4321
    123
    789
    
    希望我能帮助你,祝你好运。