【问题标题】:Input a dynamic length array in C using scanf使用 scanf 在 C 中输入动态长度数组
【发布时间】:2019-01-21 00:23:17
【问题描述】:

我必须输入一个整数数组。这个数组的长度是在运行时当用户点击某个标记键时确定的(我可能会使用 return)

示例

//input path to be analyzed
  int n = 0;
  while(scanf("%d",&input[n])==1){
    //??
  }
}

输入:

3 2 1 3 4 5(返回)

然后将这些值存储在数组a中:

[3, 2, 1, 3, 4, 5]

当然,我还需要适当的错误检查。

我确定这是一个基本问题,但是我无法解决它。

谢谢!

我认为我需要一个 while 循环,但我不确定如何使用 scanf 来终止循环、初始化数组和输入值。

【问题讨论】:

  • 一次解决一个问题。组合一个循环重复读取整数,直到 EOF 或其他终止条件发生。存储它们是该算法的扩展,但该算法必须首先完成。一旦这样做了,然后担心在读取它们时调整动态序列以存储它们。
  • 如果你想使用换行符作为哨兵,你不能明智地使用scanf()。您需要单独阅读这些行(fgets() 或 POSIX getline()),然后使用sscanf() 处理字符串。 scanf() 格式字符串中的所有数字转换规范都会愉快地跳过空格,包括换行符。
  • 顺便说一句,欢迎来到 Stack Overflow。请尽快阅读 AboutHow to Ask 页面,以及有关如何创建 MCVE (minimal reproducible example) 的页面。考虑如何在循环中存储对rand() 的连续调用返回的数字——可以采用相同的机制来处理读取和存储数字。 malloc() 等都不是很难——但也不是完全直截了当。如果您诚实地尝试解决任一问题并发现自己陷入困境,那么请解释您的问题并显示代码,您可能会得到帮助。简单地询问代码是行不通的。
  • 没有内置函数可以读取任意数量的数据并分配内存来存储它。一种解决方案是使用realloc 编写一个循环,当您成功读取另一个项目时会增加分配大小

标签: c arrays input stdio


【解决方案1】:

你可以这样做:

int main()
{
    char ch;
    int i=0;
    int input[100000]; //Or dynamically allocate
    while(scanf("%c",&ch) && (ch!='\n')){
    if(ch==' ') continue;
    input[i++]=ch - '0';
    printf("%d ",input[(i-1)]);
}
}

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2021-06-19
    • 2015-04-02
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多