我正在研究C中的数组,我正在尝试使用冒泡算法.
我做(在一个主要功能):
int main{
srand(time(NULL)); //Randomize
int SIZE = (rand() % 20) + 1;
int number[ SIZE ] = { 0 };
...
}
Run Code Online (Sandbox Code Playgroud)
但编译说:variable-sized object may not be initialized.
我需要声明一个数组来插入N个随机生成的数字,然后通过冒泡排序算法对它们进行排序.
我使用"stdio.h"和"time.h".
为什么,如果我尝试将所有数字的数组初始化为0,编译器会出错?如果我擦除= { 0 };,编译器不会出错,但程序运行不好
这是我的代码:http: //pastebin.com/uBaYWXbR
谢谢大家!:)对不起,如果我的英语不好.
number编译时不知道大小,因此编译器无法为其生成初始化程序.您可以使用自己初始化它memset,或者您可以使数组的大小为编译时常量.
memset(number, 0, SIZE*sizeof(int));
Run Code Online (Sandbox Code Playgroud)
当您完全省略初始化时,您的程序可能会失败,因为它假设数组已初始化为0,而它根本没有初始化并包含任意值.
错误消息足够清楚:您可能无法初始化VLA.所以简单地替换这个陈述
int number[ SIZE ] = { 0 };
Run Code Online (Sandbox Code Playgroud)
对于
int number[ SIZE ];
Run Code Online (Sandbox Code Playgroud)
如果您希望数组的所有元素都等于0,那么您可以使用标memset头中声明的标准C函数<string.h>.例如
int number[ SIZE ];
memset( number, 0, sizeof( number ) );
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void)
{
srand( ( unsigned int )time( NULL ) );
int SIZE = rand() % 20 + 1;
int a[SIZE];
memset( a, 0, sizeof( a ) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
至于你的程序,那么即使是第一个循环也是无效的
for(i=0; i <= SIZE; i++);
{
number[ i ] = (rand() % 100) + 1;
}
Run Code Online (Sandbox Code Playgroud)
首先,你必须删除for语句末尾的分号,循环的条件应该是
i < SIZE
Run Code Online (Sandbox Code Playgroud)
因此它看起来像
for ( i = 0; i < SIZE; i++ )
{
number[ i ] = rand() % 100 + 1;
}
Run Code Online (Sandbox Code Playgroud)
另外,我还没有看到你的程序中有泡泡排序的地方.:)