【问题标题】:Using strtok to put a list of numbers into an array, C使用 strtok 将数字列表放入数组中,C
【发布时间】:2018-05-10 09:28:32
【问题描述】:

我要让用户给我 20 个数字,用逗号分隔。

为什么我不能指定一个数组的维度并“直接”将用户输入分配给这个数组?或者,是否有可能做到这一点,但我只是输入错误的代码来实现这一点?

我一直在研究 strtok 函数,但由于逗号将出现,这不会将数组转换为 char 数组吗?我希望数组是一个 int,因为用户只会给我整数。任何想法将不胜感激。

谢谢!

【问题讨论】:

  • 也可以查看atoisscanf。您可以在这里发布您的代码吗?
  • 通过“直接”,我的意思是如果我可以使用 scanf 将用户输入分配给正确大小的数组......我认为这会起作用,但在玩过这个之后我发现这没有像我希望的那样工作。
  • 不幸的是,scanf 已经定义了用于检索和存储输入的接口。如果您对此有具体问题,请详细说明您的尝试、预期结果、实际结果、您期望它起作用的原因以及您已经进行了哪些调查以确定它为什么不起作用。跨度>
  • strtok 可用于将逗号分隔的行分割成逗号之间的部分。然后,您可以将它们传递给将字符串转换为整数值的函数。不过,您或许可以直接申请strtol

标签: c


【解决方案1】:

有 2 种替代方法可以使用 strtok 来实现您的目标:

  • 你可以循环输入数字:

    int array[20];
    int n;
    for (n = 0; n < 20 && scanf("%d", &array[n]) == 1; i++)
        continue;
    printf("%d numbers were input\n", n);
    
  • 您可以阅读整行输入并使用strtol() 转换数字:

    int array[20];
    int n = 0;
    char buf[256];
    if (fgets(buf, sizeof buf, stdin)) {
        char *p, *q;
        for (p = buf, n = 0; n < 20; n++) {
            array[n] = strtol(p, &q, 10);
            if (p == q)
                break;
            p = q;
        }
        printf("%d numbers were input\n", n);
    }
    

【讨论】:

    【解决方案2】:
    #include<stdio.h>
    #include<string.h>
    void main()
    {
      char str[100];    
      gets(str);
      char *arr = strtok(str,",");
      while (arr!=NULL)  {
        printf("\n%s", arr);    
        arr = strtok(NULL,","); 
      }
      puts(arr);
    }
    

    【讨论】:

    • gets之后的初始strtokarr的定义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多