(C)允许输入无限数字,反转输入数字的顺序&输入0时结束程序

时间:2015-03-12 00:36:08

标签: c integer reverse infinite

我正在处理一个项目,我必须允许用户输入无限数量的数字并反转输入数字的顺序,如果输入0则结束程序。我做了类似的事情,除了我设置用户可以输入的数字量之外,例如在下面的代码中,我允许用户只输入三个数字,反转顺序并在输入-1时结束。 / p>

#include <stdio.h>
#define MAX 3 // Defining max amount of numbers to be entered to 3
main()
{
    int numbers[MAX], i, end;
    printf ("Please enter %d integers:\n", MAX);
        for (i = 0; i < MAX; i++){
         scanf("%d", &numbers[i]);
         if (numbers[i]==-1){ // Loop ends when -1 is entered
          for (end=i; end<MAX; end++)
           numbers[end]='\0'; // Nulls the value of blank locations in the array
        i=MAX;  
         }
        }
    printf ("\nThe values in reverse order are:\n");
    for (i = MAX-1; i >= 0; i--)
    {
        if(numbers[i]!='\0') // Will not print null values in the array
        printf("\n%d ", numbers[i]);
    }
    return 0;
}

我该如何实现这一目标?我猜测我无法使用阵列,而且我对此非常陌生......

2 个答案:

答案 0 :(得分:1)

不,数组不能动态增长(不是没有一些额外的修补,请参阅下面的评论),因此他们无法容纳无限数量的项目。

您需要一些可以增长的结构,C不提供一个结构,因此您必须使用第三方实现或编写自己的实现。堆栈最适合您的问题。

此外,您的循环必须继续,直到输入-1。带有break语句的无限循环,或者检查输入数字的do-while循环。

<小时/> 编辑:最初针对C ++的问题,我的原始答案,在下面,不再相关。

你想看看C ++的STL。例如,std::vectorstd::dequestd::stack对您的情况有用。

答案 1 :(得分:0)

您可以使用std :: vector来执行此操作。

这是你的std :: vector的声明。告诉矢量你想要它是int

类型的矢量
std::vector<int> numbers;

然后添加到std :: vector的末尾,使用push_back(),它将整数放在数组的后面。向后推动更多元素时,向量的大小将动态增加。

int input;
numbers.push_back(input);

然后通过it迭代器,您可以使用反向迭代器,或者只是使用numbers.size()进行迭代,以找出向量中有多少元素。