因为要参加自考所以按课本的要求做了个实验题。
题目要求是编写一个程序,动态分配能存10个int值的数组;通过键盘为数组赋值以下
以下是我的代码
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int* a,b=1;
a = (int*)malloc(b* sizeof(int));
if (a!=NULL)
{
for (int i = 0; i <b; i++)
{
a[i]=0;
}//初始化
for (int i = 0; i < b; i++)
{
printf("数字以空隔键分开,回车键确认\n\n");
if (b == 1)
{
printf("请输入要数组的个数\n");
scanf_s("%d", &b);
}
printf("请输入要计算第%d数\n", i+1);
scanf_s("%d", a+i);
system("cls");
}
}
free(a);
a = NULL;
return 0;
}
我在任意输入数组个数后,通过键盘把所有值都输完后出现以下错误,
b是1,a数组就1个元素,scanf_s("%d", a+i);这里可能会导致数组越界。
a = (int *)malloc(b* sizeof(int)); 改成 a = (int *)malloc(10* sizeof(int)); 试试。
你最终要实现什么功能?这个代码看着有点蒙,你把题目要求发出来吧,帮你改一下代码。
代码修改如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a,i;
int maxv,minv;
a = (int*)malloc(10*sizeof(int)); //动态分配10个int空间
for(i=0;i<10;i++)
{
scanf("%d",&a[i]); //输入10个数
if(i==0)
{
maxv = a[0];
minv = a[0];
}else
{
if(a[i] > maxv)
maxv = a[i];
if(a[i] < minv)
minv = a[i];
}
}
printf("最大值:%d,最小值:%d",maxv,minv);
free(a);
return 0;
}