C语言命令行参数
C语言命令行参数
命令行参数是程序运行时通过终端传入的参数,通过main
函数的参数接收,实现“一套代码适配多种场景”,避免频繁修改代码
一、 命令行参数基础
1. main函数参数
int main(int argc,char* argv[])
argc
:整数类型,表示命令行参数的总个数(包含程序名本身)
argv[]
:字符串数组,存储具体的参数内容:
argv[0]
:程序自身的路径或名称(如./main
)argv[1]~argv[argc-1]
:用户传入的参数argv[argc]
:固定为NULL
,作为参数列表的结束标志
2. 示例
运行命令:./main hello 123
argc = 3
(参数个数:程序名 + 2个用户参数)argv[0] = "./main"
(程序名)argv[1] = "hello"
(第一个用户参数)argv[2] = "123"
(第二个用户参数)
3. 字符串转整数:atoi()
将字符串形式的数字转换为整数(仅提取开头的数字部分)
atoi("123") → 123 // 正常转换
atoi("123.5") → 123 // 忽略小数点及后面内容
atoi("123abc") → 123 // 忽略非数字后缀
atoi("abc123") → 0 // 非数字开头,返回0
代码:
//main函数参数
#include<stdio.h>
#include<stdlib.h> // atoi()int main(int argc,char* argv[]){printf("argc = %d\n",argc);for(int i = 0;i < argc;i++){printf("argv[%d] = %s\n",i,argv[i]);}//命令行给的是字符串,但是实际处理得是整数//字符串开头的数字内容 转 整数 atoi()//atoi("123") // 正常转换 123//atoi("123.5") // 忽略小数点及后面内容 123//atoi("123abc") // 忽略非数字后缀 123//atoi("abc123") // 非数字开头,返回0printf("%d\n",num);return 0;
}
二、 登录界面案例
通过命令行参数传入用户名和密码,验证后判断登录结果
文件名:login.c请用户输入用户名和密码
用户名:sunwukong
密码:123456
显示登录成功, 其他情况登录失败
#include <stdio.h>
#include <string.h> // strcmp()// 主函数带命令行参数:argc记录参数个数,argv存储参数内容
int main(int argc, char* argv[]) {// 预设正确的用户名和密码(模拟系统中的合法账号)char* username = "sunwukong"; // 正确的用户名char* password = "123456"; // 对应用户名的密码// 步骤1:检查命令行参数是否完整// argc < 3 表示参数个数不足(至少需要:程序名 + 用户名 + 密码)if (argc < 3) {// 提示用户正确的使用方式:执行程序时需传入用户名和密码printf("用法: ./login <用户名> <密码>\n");return -1; // 参数错误,提前结束程序(约定用非0值表示异常退出)// 注:return 0 用于程序正常执行完毕的情况}// 步骤2:验证用户名和密码// strcmp(a, b) 比较两个字符串:返回0表示相等,非0表示不等// 需同时满足用户名和密码匹配才登录成功if (strcmp(argv[1], username) == 0 && strcmp(argv[2], password) == 0) {printf("登录成功\n"); // 验证通过,提示成功信息} else {// 用户名或密码不匹配时,提示失败信息printf("用户名或密码错误,登录失败\n");}return 0; // 程序正常执行结束
}
三、 鸡兔同笼案例
通过命令行参数传入头数和腿数,验证后判断结果
设计鸡兔同笼计算器
文件名:chicken_rabbit.c通过命令行传入头数和腿数
计算并显示鸡和兔的数量(数量为非负整数)
输入不合法时提示错误信息
#include <stdio.h>
#include <stdlib.h> // atoi()// 主函数带命令行参数:argc记录参数个数,argv存储参数内容
int main(int argc, char* argv[]) {// 步骤1:检查命令行参数是否完整// argc != 3 表示参数个数不对(需要:程序名 + 头数 + 腿数)if (argc != 3) {// 提示用户正确的使用方式printf("用法: ./chicken_rabbit <头数> <腿数>\n");return -1; // 参数错误,提前结束程序}// 步骤2:将字符串参数转换为整数(命令行参数默认是字符串类型)int heads = atoi(argv[1]); // 头数(argv[1]是第一个用户参数)int legs = atoi(argv[2]); // 腿数(argv[2]是第二个用户参数)// 步骤3:验证输入的基本合法性if (heads <= 0 || legs <= 0) {printf("错误:头数和腿数必须为正数\n");return -1;}if (legs % 2 != 0) {printf("错误:腿数必须为偶数(鸡2条腿,兔4条腿,总和必为偶数)\n");return -1;}// 步骤4:根据数学公式计算数量// 公式推导:// 鸡x + 兔y = 头数 → x = 头数 - y// 2x + 4y = 腿数 → 代入x得:y = (腿数 - 2×头数)/2int rabbits = (legs - 2 * heads) / 2; // 兔的数量int chickens = heads - rabbits; // 鸡的数量// 步骤5:验证结果是否合理(数量不能为负数,且腿数需匹配)if (chickens >= 0 && rabbits >= 0 && (2 * chickens + 4 * rabbits) == legs) {printf("计算结果:鸡%d只,兔%d只\n", chickens, rabbits);} else {printf("错误:输入的头数和腿数不符合实际情况(无合理解)\n");}return 0; // 程序正常结束
}