return n和exit(int n)小结

本文详细解释了C程序中exit(int n)与return的区别,包括它们的返回值含义、使用场景及如何通过返回值判断程序是否正常退出。同时,还介绍了几种不同的程序终止方式及其特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

exit(int n)其实就是直接退出程序,因为默认的标准程序入口为
int main(int argc, char** argv),返回值是int型的。
一般在shell下面,运行一个程序,然后使用命令echo $?就能得到该程序的返回值,也就是退出值,在main()里面,你可以用return n,也能够直接用exit(n)来做。unix默认的习惯正确退出是返回0,错误返回非0。

 

理论上exit(int n)可以返回任何int整数(<255)。返回的不同数值主要是给调用者作不同处理的。
单独的进程是返回给操作系统的。如果是多进程,是返回给父进程的。
在父进程里面调用waitpid()等函数得到子进程退出的状态,以便作不同处理

 

exit(0) 表示程序正常, exit(1)/exit(-1)表示程序异常退出
exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束
exit(1)表示进程正常退出. 返回 1;
exit(0)表示进程非正常退出. 返回 0.

return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值..
return只是 所在函数返回,后面会继续执行

 

C程序的终止分为两种: 正常终止和异常终止.
正常终止分为: return, exit, _exit, _Exit, pthreade_exit
异常中指分为: abort, SIGNAL, 线程响应取消
主要说一下正常终止的前4种, 即exit系列函数.
#include <stdlib.h>    /* ISO C */
void exit(int status);
void _Exit(int status);
#include <unistd.h>    /* POSIX */
void _exit(int status);
以上3个函数的区别是:
exit()(或return 0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose), _exit和_Exit不调用而直接由内核接管进行清理.
因此, 在main函数中exit(0)等价于return 0.

写一个设计小结,#include <stdio.h> #include <stdlib.h> #include <time.h> // 定义选项对应的值 #define ROCK ‘r’ #define SCISSORS ‘s’ #define CLOTH ‘c’ void displayGameState(int win, int lose, int draw) { printf(“\n游戏状态:\n”); printf(“获胜次数:%d\n”, win); printf(“失败次数:%d\n”, lose); printf(“平局次数:%d\n”, draw); } int getComputerChoice() { // 计算机随机生成 r/s/c 中的一个 char choices[] = {ROCK, SCISSORS, CLOTH}; return choices[rand() % 3]; } char getPlayerInput() { while (1) { char input; printf(“\n请选择(r=石头,s=剪刀,c=布,d=显示游戏状态,h=帮助,q=退出): “); scanf(” %c”, &input); switch(input){ case ROCK: printf(“您选择了 石头(rock)\n”); break; case SCISSORS: printf(“您选择了 剪刀(scissors)\n”); break; case CLOTH: printf(“您选择了 布(cloth)\n”); break; case ‘d’: printf(“当前无法直接进入该功能,请先完成一场比赛。\n”); continue; case ‘h’: printf(“帮助信息:\n” “r - 石头(rock), s - 剪刀(scissors), c - 布(cloth)\n” “d - 显示当前游戏状态(display game state)\n” “h - 获取帮助(help information)\n” “q - 退出游戏(quit)); continue; case ‘q’: exit(0); // 直接结束程序 default : printf(“无效输入,请重新选择!\n”); continue; } return input; } } void compareChoices(char player_choice, char computer_choice, int *win, int *lose, int *draw) { if(player_choice == computer_choice) { printf(“哎,是平局!\n”); (*draw)++; } else if((player_choice == ROCK && computer_choice == SCISSORS) || (player_choice == SCISSORS && computer_choice == CLOTH) || (player_choice == CLOTH && computer_choice == ROCK)) { printf(“恭喜你赢了!\n”); (*win)++; } else{ printf(“很遗憾,你输了!\n”); (*lose)++; } displayGameState(*win, *lose, *draw); } int main(){ srand(time(NULL)); // 初始化随机种子 int wins = 0, loses = 0, draws = 0; while(1){ char p_choice = getPlayerInput(); // 用户选择 char c_choice = getComputerChoice(); // 随机生成计算机的选择 switch(p_choice){ case ROCK : printf("电脑选择了: "); if(c_choice == ROCK )printf("石头.\n"); else if(c_choice ==SCISSORS) printf("剪刀.\n"); else if(c_choice==CLOTH) printf("布.\n"); break; case SCISSORS : printf("电脑选择了: "); if(c_choice == ROCK)printf("石头.\n"); else if(c_choice ==SCISSORS) printf("剪刀.\n"); else if(c_choice ==CLOTH) printf("布.\n"); break; case CLOTH : printf("电脑选择了: "); if(c_choice ==ROCK)printf("石头.\n"); else if(c_choice ==SCISSORS) printf("剪刀.\n"); else if(c_choice ==CLOTH) printf("布.\n"); break; } compareChoices(p_choice , c_choice ,&wins,&loses,&draws ); } return 0; }
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值