两个程序A.处exit(0),与exit(1)有什么区别?,第一个程序B处麻烦解释一下
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
long num;
char stname[20];
int score,i;
double average;
if((fp=fopen("C:lt12.1.txt","r"))==NULL){
printf("File open error!");
exit(0);//------------------------------------A
}
for(i=0;i<5;i++){
fscanf(fp,"%ld%s%d",&num,stname,&score);
printf("%ld %s %d ",num,stname,score);
average+=score;
}
printf("average=%.2f",average*1.0/5);
if(fclose(fp)){//-------------B
printf("Can ont close file ");
exit(0);
}
return 0;
}
--------------------------------------------------------
C:lt12.1.txt
301101 zhangwen 75
301102 chenhui 85
301103 wangweidong 89
301104 zhengwei 69
301105 guowentao 55
---------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum,*p,i,n;
printf("Enter n:");
scanf("%d",&n);
if((p=(int *) calloc(n,sizeof(int)))==NULL){
printf("Not able to allocate memory ");
exit(1);//-----------------------------------A
}
for(i=0;i<n;i++)
scanf("%d",p+i);
sum=0;
for(i=0;i<n;i++){
sum=sum+*(p+i);
}
free(p);
printf("sum=%d",sum);
return 0;
}
exit函数后面的参数,是返回给主进程的(与main 的return后面值功能相同)
如在windows下的命令行下,你可以用ERRORLEVEL得到一个执行文件的返回值
这个值只有特殊情况下才用的,如在主进程判子进程执行是否正常,像你的程序一,
你的exit(0)没有意义 ,因为你正常是retutn 0;返回值也就是0
而exit(0)返回的也是0
对程序二,你的exit(1)是可以用于对该程序的返回进行判断,正常是return 0;而若内存没有申请到,程序就返回1
程序的B处,是判断文件能否被正常关闭,这个判断也没有什么意义 ,因为一般情况下,文件是不可能不能关闭(除非系统有故障了)