当前位置: 首页 > news >正文

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;  // 程序正常结束
}
http://www.dtcms.com/a/326703.html

相关文章:

  • 北京JAVA基础面试30天打卡07
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容
  • vagrant和itamae怎么配合使用? (放弃)
  • 33Nginx模块的从配置与优化
  • 如何使用curl编程来下载文件
  • MacBook 本地化部署 Dify 指南
  • AIDL简单使用
  • 【接口自动化测试】---YAML、JSON Schema
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • VMD例程(Matlab 2021b可直接使用)
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • 小白入门指南:Edge SCDN 轻松上手
  • Dify 从入门到精通(第 28/100 篇):Dify 的多租户架构
  • 【学习嵌入式day-21-Linux编程-shell命令】
  • 第九篇:调试工具:Three.js Inspector使用
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【华为机试】648. 单词替换
  • SciChart图形库应用
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • TCGA数据集下载工具gdc-client下载慢解决方案
  • mysql参数调优之 innodb_buffer_pool_size和innodb_buffer_pool_instances (三)
  • Java AI生成长篇小说的实用
  • VirtualBox虚拟机网卡配置
  • NR,LTE基于CSI的PMI-RI码本选择
  • 【算法训练营Day23】贪心算法part1
  • nginx高新能web服务器
  • UVM验证—UVM 简述
  • 从0-1搭建webpack的前端工程化项目
  • MySQL杂项