【问题标题】:User input and dynamic memory allocation in CC中的用户输入和动态内存分配
【发布时间】:2020-11-17 22:42:31
【问题描述】:

我对 C 编程还很陌生,我一直在尝试创建一个首先需要用户输入的程序。一开始,我需要用户输入一定数量的数字,例如:4 12 8 6 5 4 7

所以基本上,他一直在输入数字,在它们之间留出空格。然后用户按下回车键,这就是用户输入的结束。阅读我已经在网上找到的东西,我看到了这个帖子:

while (...){
      scanf("%c",&c[i]);
         if(c[i]=='\n')
            break;
}

那么,现在,使用动态内存分配,是否可以让用户像这样在一行中输入所有内容,以空格分隔,然后按Enter键结束?

我想要发生的事情:

  • 用户输入:5 4 5 6 8 5 输入
  • 数组 = {5, 4, 5, 6, 8, 5}

【问题讨论】:

    标签: c user-input dynamic-memory-allocation


    【解决方案1】:

    你说:certain amount of numbers;你知道这个数字吗?如果是 - 您可以为那么多值分配内存。如果没有 - 您需要实现一些逻辑来根据需要分配额外的存储空间。例如,将已分配的空间加倍。您可以将容量增加 1 以避免浪费空间,但代价是重复复制数据。

    #define  _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      char ch = 0;
      int size = 0, capacity = 1;
      int* c = malloc(sizeof(int) * capacity);
      while (1) {
        scanf("%d%c", &c[size], &ch);
        if (ch == '\n')
          break;
        size++;
        if (size == capacity)
        {
          capacity *= 2; // use whatever policy to increase the capacity
          c = realloc(c, sizeof(int) * capacity);
        }
      }
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2014-03-18
      • 2016-01-30
      • 2015-03-03
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多