c/c++语言开发共享在数组中找到孤立的整数

如果可以的话,请参考这个 hackerrank挑战。

问题是在数组中找到孤立的整数,给定一个数组只包含一对,除了一个孤独的整数。

问题出在这个测试用例上

9 4 9 95 93 57 4 57 93 9 

9是数组大小,下面是数组

查看// ——突出显示的代码部分

如果我将scanf(“%d”,&n)置于int arr [n]代码上方工作正常,但反过来会产生可怕的结果。 请帮帮我

 #include  int lonely_integer(int* a, int size); int main(){ //n is size of array, i is counter variable int n, i, result; // --------------------- int arr[n]; scanf("%d", &n); // --------------------- printf("%dn", n); for(i = 0; i < n; i++){ scanf("%d", &arr[i]); } result = lonely_integer(arr, n); printf("%d", result); return 0; } int lonely_integer(int* a, int size){ int i; int res = 0; for(i = 0; i < size; i++){ res = res ^ a[i]; } return res; } 

    你想要使用:

     #include  /* ... */ int *arr; scanf("%d", &n); arr = malloc(sizeof(int) * n); 

    这样, arr在运行时动态分配,因此它可以是任何大小,具体取决于输入n

    你最初做的事情(即通过scanf接收n后声明arr[n]scanf("%d", &n); int arr[n]; )不是一个好主意,因为它使用了可变长度数组 , C的一个特征,在最新的C标准中不是强制性的。

    你看, arr是在编译时创建的,你通常只能用编译时已知的常量表达式初始化它, n ,一个变量作为用户输入接收,显然不是。 可变长度数组是该语言的一个特性,它基本上允许您绕过此规则,即它们使您能够将数组初始化为编译时未知的长度。 这已在C99标准化 ,但在C11中被列为“可选”。

    之后你做了什么( int arr[n]; scanf("%d", &n); )是非常不合逻辑的,因为你收到n的值作为用户输入之前 ,你将arr声明为n整数的数组,而且,知道它的价值。 它会打印垃圾,因为n最初初始化为未指定的“垃圾”值,这是您声明它时VLA的大小:

     int arr[n]; //n is garbage at this point, you have no idea how large arr will be! scanf("%d", &n); //you got the value of n that you needed, but too late, alas! 

    在问题中给出n范围是1 <= N < 100 ,这是小的并且可以使用可变长度arrays 。 但你在这里做错了

     int arr[n]; // n is uninitialized. Its value is indeterminate. scanf("%d", &n); 

    在将其用作数组大小之前,需要初始化n

     scanf("%d", &n); int arr[n]; 

    使用未初始化的变量分配数组将导致未定义的行为,编译器将抛出警告“在此函数中使用未初始化的变量”

    如果你在运行时获得数组的大小,那么使用@ Mints97发布的动态内存分配是明智的

     int data_size; int *data_array; scanf("%d", &data_size); data_array = (int*)calloc(data_size,sizeof(int)); /* . */ // Free the memory at the end free(data_array); data_array = NULL; 

    如果要在编译时设置数组大小,可以定义宏

     #define DATA_SIZE 9 

    或者在编译代码时设置宏

     gcc test.c -o test -DDATA_SIZE=9 -Wall 

    ‘n’的值必须在使用之前定义。就像你正在使用的那样

    int arr [n];

    在读取’n’的值之前。 所以编译器不会知道,数组’n’中存在多少个元素可能是一个垃圾值。它应该为数组分配多少内存。

    因此在使用数组定义之前,你必须读取’n’的值。

      以上就是c/c++开发分享在数组中找到孤立的整数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560420.html

      (1)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐