Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(C) 允许输入无限个数字,颠倒输入数字的顺序&;输入0时结束程序_C_Integer_Reverse_Infinite - Fatal编程技术网

(C) 允许输入无限个数字,颠倒输入数字的顺序&;输入0时结束程序

(C) 允许输入无限个数字,颠倒输入数字的顺序&;输入0时结束程序,c,integer,reverse,infinite,C,Integer,Reverse,Infinite,我现在正在做一个项目,我必须允许用户输入无限数量的数字,并颠倒输入数字的顺序,如果输入0,则结束程序。我做了类似的事情,除了我设置了用户可以输入的数字量之外,因此,例如在下面的代码中,我只允许用户输入三个数字,颠倒顺序,并在输入-1时结束 #include <stdio.h> #define MAX 3 // Defining max amount of numbers to be entered to 3 main() { int numbers[MAX], i, end;

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

#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;
}
#包括
#定义最大3//定义要输入到3的最大数字量
main()
{
整数[MAX],i,end;
printf(“请输入%d个整数:\n”,最大值);
对于(i=0;i

我怎么才能做到这一点呢?我猜我将无法使用数组,而且我对这一点非常陌生,所以…

您可以使用std::vector来实现这一点

这是您的std::vector的声明,其中告诉向量您希望它是int类型的向量

std::vector<int> numbers;

然后要遍历它,可以使用反向迭代器,也可以使用与使用numbers.size()相同的方法进行迭代,以找出向量中有多少元素。

不,数组不能动态增长(除非进行一些额外的修补,请参阅下面的注释),因此它们不能容纳无限多的项

你需要一些可以扩展的结构,C没有提供这样的结构,所以你必须使用第三方实现或自己编写。堆栈最适合你的问题

此外,您的循环必须持续到输入-1为止。可以是带有break语句的无限循环,也可以是检查输入数字的do while循环


编辑:原题以C++为基础,我原来的答案,下面,已经不相关了。

你想研究C++的STL,或者,例如,在你的情况下,你可以使用。< /P>因为你把它标记为C++,我们可以建议使用标准的C++容器代替原始的C样式数组的解决方案吗?使用<代码> STD::vector < /代码>代替数组,使用<代码> do>代码>循环,而不是一个循环。数组不会让你输入无限。e数字。虽然您试图将数组大小设置为动态,但这有点麻烦,您可以使用堆栈代替数组。因此,您可以轻松地弹出相反的顺序。有没有办法使用“原始C样式”来实现这一点?

numbers[end]='\0';
numbers[]是一个int数组。您不需要
'\o'
,只要
0
就足够了。[非致命]但:
if(数字[i]=-1){
当输入零时,您想停止。下定决心!顺便说一句:无限!=MAXWell,这个答案已被接受,所以我不想麻烦发布一个,但正确的答案是数组可以使用
realloc
动态增长。当然,数组大小仍然限于可用内存,而不是无限大。@user3386109 true,a虽然<代码> ReLoC/可以移动它,但我并不认为重新分配是与增长相同的。当然,它不可能是无限的,这就是为什么我把斜字放在斜体中的原因:P。我会编辑我的答案。我不知道它是如何工作的……你能通过更详细地告诉我如何在我的代码中实现它吗?它是POS吗?可以更详细地介绍一下吗?比如在我的代码中实现它之类的,因为我完全迷路了..我以前从未使用过std::vector,而且我对这方面还很陌生。。
int input;
numbers.push_back(input);