user-0 提问: 输入正整数n，在输入n个数，得出他们的最小数（我这个代码有问题，我一直找不出来，就是输入所以的数后，一直得不出答案，不知道是为啥）

回复:
user: user-0
content: 引用 9 楼 chxchxkkk的回复:scanf("%d ", &b[i]); 把这一句%d后面的空格删除，scanf("%d", &b[i]);就可正常运行了 嗯嗯，我刚刚懂了，谢谢指点

user: user-1
content: scanf("%d ", &b[i]); 把这一句%d后面的空格删除，scanf("%d", &b[i]);就可正常运行了

user: user-0
content: 引用 5 楼 qq_1457346882 的回复:你这样比较，比如１，２，３，４，第一次tmp=1.第二次tmp=2,已经就变了，应该for循环上面tmp=arr[0];设置变量为数组首个值，然后比较，如果后面的小于ｔｍｐ就把小的那个值赋给ｔｍｐ，你这样写，有没有考虑到数组越界？当ｉ＝ｌｅｎｇｔｈ时，arr[ｉ＋１]是没有这个值的 嗯嗯，我想的太浅了，感谢解释，我懂了

user: user-0
content: 引用 1 楼 user-5 的回复:肯定不行，min函数里面应该先把tmp赋值arr[0],然后比较，用tmp去和当前的arr[i]比，比tmp小就赋值给tmp 嗯嗯，懂了懂了，我考虑的太浅了，谢谢指点

user: user-0
content: 引用 3 楼 棉猴 的回复:#include <stdio.h> int Min(int* arr, int length)//从一个数组里面找出最小的数   {  	int tmp = 0;  	int i = 0;  	int j = 1; 	tmp = arr[i];//----------添加代码----------- //-------------以下代码已修改------------- 	for (int i = 0; i < length-1; i++)  	{  		if (arr[i+1] < tmp)  		{  			tmp = arr[i + 1];  		}  	}  	return tmp;  } int main() { 	int a;  	printf("输入一个正整数n:");  	scanf("%d", &a);  	int* b = new int[a];//--------改为动态分配内存---------  	printf("再输入n个整数：");  	for (int i = 0; i < a; i++) 	{ 		scanf("%d", &b[i]);//-------%d后面的空格去掉-------  	}   	printf("%d\n", Min(b, a));//-------将长度直接改为a---------- 	delete[] b;//---------释放内存---------     return 0; }  VS2015 C++环境运行结果   受教了，刚刚试了一下没问题，谢谢指点

user: user-2
content: 你这样比较，比如１，２，３，４，第一次tmp=1.第二次tmp=2,已经就变了，应该for循环上面tmp=arr[0];设置变量为数组首个值，然后比较，如果后面的小于ｔｍｐ就把小的那个值赋给ｔｍｐ，你这样写，有没有考虑到数组越界？当ｉ＝ｌｅｎｇｔｈ时，arr[ｉ＋１]是没有这个值的

user: user-0
content: 引用 2 楼 qybao 的回复:问题1，找最小的逻辑不对 int Min(int* arr,int length)//从一个数组里面找出最小的数    {       int tmp = 0;       int i = 0;       int j = 1;     tmp = arr[0];       for (int i = 0; i < length; i++)       {           //if (arr[i] >= arr[i + 1])        if (arr[i] > tmp) 这里是比较tmp和arr[i],不是比较数组的相邻两个元素，你想假设数组{0,1,2}，比较数组相邻的元素0和1是，tmp=0（取得最小），但是比较相邻的元素1和2时，tmp又被改成1了，因为比较1和2时，你忘了比较0了，所以直接用tmp比较就好了           {               //tmp = arr[i + 1];             tmp = arr[i ];           }           //else          //     tmp = arr[i];       }       return tmp;   }  问题2 int b[a] ; //不用变量声明数组的长度，改成int b[100]或者用动态申请内存 int *b=(int*)malloc(sizeof(int)*a)（记得结束后释放内存） 另外，length不用重新计算，直接用int length=a int Min(int* arr,int length)//从一个数组里面找出最小的数   { 	int tmp=arr[0]; 	 	for(int j=1;j<length;j++) 	{ 		 		if(tmp>arr[j]) 			tmp=arr[j]; 			 			 	}  	 	return tmp;  }  int main()  { 	int a;   	printf("输入一个正整数n:");  	scanf("%d", &a);  	int *b=(int *)malloc(sizeof(int)*a); 		  	printf("再输入n个整数：");  	for (int i = 0; i < a; i++)  	{ 		scanf("%d ", &b[i]);  	} 	 	printf("%d\n",Min(b,a) ); 	free(b); }  谢谢指点，我觉得好像scanf那里还有错误，我把数据都输入后点回车，还是没反应，上面是我改了的代码

user: user-3
content: #include <stdio.h> int Min(int* arr, int length)//从一个数组里面找出最小的数   {  	int tmp = 0;  	int i = 0;  	int j = 1; 	tmp = arr[i];//----------添加代码----------- //-------------以下代码已修改------------- 	for (int i = 0; i < length-1; i++)  	{  		if (arr[i+1] < tmp)  		{  			tmp = arr[i + 1];  		}  	}  	return tmp;  } int main() { 	int a;  	printf("输入一个正整数n:");  	scanf("%d", &a);  	int* b = new int[a];//--------改为动态分配内存---------  	printf("再输入n个整数：");  	for (int i = 0; i < a; i++) 	{ 		scanf("%d", &b[i]);//-------%d后面的空格去掉-------  	}   	printf("%d\n", Min(b, a));//-------将长度直接改为a---------- 	delete[] b;//---------释放内存---------     return 0; }  VS2015 C++环境运行结果

user: user-4
content: 问题1，找最小的逻辑不对 int Min(int* arr,int length)//从一个数组里面找出最小的数    {       int tmp = 0;       int i = 0;       int j = 1;     tmp = arr[0];       for (int i = 0; i < length; i++)       {           //if (arr[i] >= arr[i + 1])        if (arr[i] > tmp) 这里是比较tmp和arr[i],不是比较数组的相邻两个元素，你想假设数组{0,1,2}，比较数组相邻的元素0和1是，tmp=0（取得最小），但是比较相邻的元素1和2时，tmp又被改成1了，因为比较1和2时，你忘了比较0了，所以直接用tmp比较就好了           {               //tmp = arr[i + 1];             tmp = arr[i ];           }           //else          //     tmp = arr[i];       }       return tmp;   }  问题2 int b[a] ; //不用变量声明数组的长度，改成int b[100]或者用动态申请内存 int *b=(int*)malloc(sizeof(int)*a)（记得结束后释放内存） 另外，length不用重新计算，直接用int length=a

user: user-5
content: 肯定不行，min函数里面应该先把tmp赋值arr[0],然后比较，用tmp去和当前的arr[i]比，比tmp小就赋值给tmp