c语言中getnum函数 c语言中gets函数用法( 二 )


menuobj.thestyle.visibility="visible" // 显示菜单
}
希采纳
有懂C语言的吗 从1-10个数里选一个整数,然后在剩下的9个数中再选一个,以此类推 用函数咋写,用到EX表格什么意思?
你是说在excel表格里有任意10个数字,然后每次调用函数从中取出1个数字 , 直到取完所有10个数字?
如果要从excel里读取数字,最简单的办法是,把excel另存为csv文件(数字逗号分割) 。
然后用文件流读取文件数据 , 存放在数组中,读取文件的代码我就不写了 。
你要的从10个数字中依次读取随机一个数的函数,我写如下:
演示效果:
#includestdio.h
#includestdlib.h
#includetime.h
#includemalloc.h
#include unistd.h
int getNum(int **nums,int *size);
int main()
{
//size就是数字个数,nums就是数组,你如果写文件读写,读出来的数字就存放在nums中就可以了,之后只要循环调用我的getNum函数就可以依次取值了 。
int i,size=10,*nums=(int *)malloc(sizeof(int)*size);
srand(time(NULL));
for(i=0;i10;i++)//我这里为了演示,nums数组里存放1,2,3,4,5,6,7,8,9,10十个数字
nums[i]=i+1;
while(1)
printf("数组中剩余数字个数%d,本次调用函数getNum获得数字%d\n",size,getNum(nums,size));
//调用就像这样传参,函数会自动改变数组大?。?还有size的值,你什么都不用管
//如果数组中数字已经被取完 , 还调用这函数,那么会提示“数组中无数据可取”,并自动结束程序,如果不希望被结束 , 自行控制调用次数
return 0;
}
int getNum(int **nums,int *size)
{
int rnum,i,j,*p;
if(*size==1)
{
*size=0;
return *nums[0];
}
if(*size==0)
{
printf("数组中无数据可?。n");
exit(0);
}
i=rand()%(*size);
rnum=(*nums)[i];
for(j=i;j(*size)-1;j++)
(*nums)[j]=(*nums)[j+1];
(*size)--;
p=realloc(*nums,sizeof(int)*(*size));
if(p==NULL)
{
printf("内存申请失败!\n");
exit(0);
}
*nums=p;
return rnum;
}
无返回的函数()里加void和不加有什么区别有区别的.
在C语言里,标准的C调用都为函数预留有返回值的空间.所以不管你用不用void来修饰函数,它都有一个返回值,不同的是这个返回值有没有意义和意义是什么.当你用void来修饰时,编译系统会识别程序员的无意识的调用其返回值,从而编译不通过.
接下来用一些例子来说明:
main()
{
int i;
i=getnum();
}
void getnum()
{
int t;
t=0;
}
此时,getnum()的返回值空间是无意义的不可预知的数,所以编译系统处理i=getnum()一句为错误,因而不通过
main()
{
int i;
i=getnum();
}
getnum()
{
int t;
t=0;
}
这里getnum()没有void修饰,所以能通过,但是由于对i=getnum()这样取得不可预知数据而没有错误提示,程序员就很难在一大堆程序里找出这个错误来.这样会导致所有对i值有依赖的计算.
main()
{
int i;
int k;
i=getnum(k);
}
int getnum(int k)
{
if(k=0){return 1;}
else return 0;
}
i=getnum()得到了getnum()的返回值.返回值中含有期望的信息.这里得到的信息是对于已经定义而未显式赋值的k,其值到底是0或者非0 。
还可以从函数的返回值中得到更加丰富的信息 。比如:函数的运行情况 , 比较结果,生成数或串,计算结果……
所以对于不想利用的返回值,就应该对其显式地以void修饰 。这是一种好的编程习惯 。关于编程习惯的东西 , 可以自己找资料学习 , 关键是自己能花心思培养 。

推荐阅读