user-0 提问: C语言如何通过输入任意的数进行排序？

回复:
user: user-1
content: 引用 2 楼 u014578123 的回复:额...大神你理解错了哦！我不是想要这种效果，我是想把int array[] = {4,9,10,12,14,16,18,21,24,26};这句改为int array[]就是让用户自己输入个数，然后再判断用户输入了几个数以及这些数要按以每组多少个的方式排列出来的效果。所以M和N是不能用常量表示的。。。可以再改改吗？ 你的意思是首先用户输入一串数,假设是 4 9 10 12 14 16 18 21 , 然后使得int array[] 变成 {4,9,10,12,14,16,18,21}; 然后我得出用户一共输入了8个数，然后我再让用户输入一个数：假设是6 然后此时我以每组6个的方式排列出来？ LZ是这个意思吧

user: user-0
content: 赵老师你好我看过malloc.h函数的解释自己调试过了也没弄好可不可以帮我加在我的代码里面呢？

user: user-2
content: malloc、realloc、free

user: user-3
content: // 此程序演示输入任意个整数 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #include <stdbool.h>  bool getArray(int **array,size_t *returnSize);  int main(int argc,char *argv[]) {     int *array=NULL;     size_t arraySize=0;     int i;      if(argc==1)     {// 从stdin输入整数         if(!getArray(&array,&arraySize))             return -1;     }     else     {// 从命令行参数中获取整数         array=(int*)malloc((argc-1)*sizeof(int));         arraySize=argc-1;         for(i=0;i<arraySize;++i)             array[i]=atoi(argv[i+1]);     }      for(i=0;i<arraySize;++i)         printf(!i+",%d",array[i]);     putchar('\n');      if(array)         free(array);      return 0; }  bool getArray(int **array,size_t *returnSize) {     char *str=NULL,*p;     size_t size=0;      if(!array||!returnSize)         return false;      do     {         char *t=(char*)realloc(str,++size*sizeof(char));         if(!t)         {             if(str)                 free(str);             return false;         }         str=t;         str[size-1]=getchar();     }while('\n'!=str[size-1]&&EOF!=str[size-1]);     str[size-1]=0;      *array=NULL;     *returnSize=0;     for(p=strtok(str," ");p;p=strtok(NULL," "))     {         int *t=(int*)realloc(*array,++*returnSize*sizeof(int));         if(!t)         {             if(*array)             {                 free(*array);                 *array=NULL;             }             return false;         }         *array=t;         (*array)[*returnSize-1]=atoi(p);     }      if(str)         free(str);     return true; }

user: user-4
content: 一种方案是先输入个数，然后输入一批数据 这样可以有两种办法 1）个数保证不超过某个值。例如4096 int array[4096]; 2）调用库函数 malloc，calloc 等， 动态分配内存，个数不限（实际上还是有限制的，内存有限，不可能无限分配） 用完记着调用 free 释放内存

user: user-0
content: 引用 5 楼 小灸舞的回复:[quote=引用 2 楼 u014578123 的回复:] 额...大神你理解错了哦！我不是想要这种效果，我是想把int array[] = {4,9,10,12,14,16,18,21,24,26};这句改为int array[]就是让用户自己输入个数，然后再判断用户输入了几个数以及这些数要按以每组多少个的方式排列出来的效果。所以M和N是不能用常量表示的。。。可以再改改吗？ 你的意思是首先用户输入一串数,假设是 4 9 10 12 14 16 18 21 , 然后使得int array[] 变成 {4,9,10,12,14,16,18,21}; 然后我得出用户一共输入了8个数，然后我再让用户输入一个数：假设是6 然后此时我以每组6个的方式排列出来？ LZ是这个意思吧[/quote] 对啊！首先让用户输入号码然后再用printf("  ");提示用户选择几个刚才输入的号码再用printf("  ");提示用户每行输出几个数就这样

user: user-0
content: 额...大神你理解错了哦！我不是想要这种效果，我是想把int array[] = {4,9,10,12,14,16,18,21,24,26};这句改为int array[]就是让用户自己输入个数，然后再判断用户输入了几个数以及这些数要按以每组多少个的方式排列出来的效果。所以M和N是不能用常量表示的。。。可以再改改吗？

user: user-1
content: LZ改成下面那样好了，亲测应该是OK的，通过cin接收n和m的值，然后new一个数组就行了  #include <stdio.h>  #include <stdlib.h> using namespace std; int array[] = {4,9,10,12,14,16,18,21,24,26}; #define N  10 #define M  6 //int queue[N] = {0}; int *queue; int top = 0;  void comb(int s, int n, int m) { 	int i; 	if (s > n) 		return ; 	if (top == m) 	{ 		for (i = 0; i < m; i++) 		{ 			printf("%d ", queue[i]); 		} 		i++; 		printf("\n");   		return ; 		printf("共有%d中\n",i);      	}  	queue[top++] = array[s];  	comb(s+1, n, m); 	top--; 	comb(s+1, n, m);  }  int main() { 	printf("组合结果:\n"); 	int n, m; 	cin >> n >> m; 	queue = new int[n]; 	comb(0, n, m); 	system("pause"); 	return 0; }