C语言命令行参数处理:输出偶数位参数尾字符及参数名
C程序命令行参数处理问题修复与实现
需求说明
- 编写C程序,接受最多6个参数(含程序名在内,总参数数量为2-7个)
- 对奇数编号的参数(从1开始计数),输出其首字符;对偶数编号的参数,输出其最后一个字符
- 输出的字符之间用空格分隔
- 参数数量不符合要求时,提示正确用法
- 需列出所有输入的参数名称
现有代码及问题
现有代码:
#include<stdio.h> int main(int argc,char* argv[]) { int counter; //here in c always one argument is ./a.out so we will check counting one extra //argc contains the number of argument passed //argv contain all the arguments if(argc<3 || argc>7) { //invalid number of arguments printf("\nplease pass appropriate number of command line attributes"); } else { //printing all the arguments printf("\nName of arguments passed: %s\n", argv[counter]); //looping through all argumnets for(counter=0;counter<argc;counter++) { //if is at even place but here odd as numbering from 1 if(counter%-1==0){ printf("%c ",argv[counter][0]); } //odd place else { printf("%c ",argv[counter][0]); } } } return 0; }
存在的核心问题:
- 变量
counter未初始化就调用argv[counter],导致参数名输出异常 - 参数编号逻辑完全错误:判断条件
counter%-1==0恒成立,且未区分奇偶编号的处理规则 - 未实现偶数编号参数输出最后一个字符的逻辑
- 参数列表仅输出单个参数,未完整遍历所有传入参数
- 错误限制参数数量为3-7个,不符合需求的2-7个范围
- 提示信息模糊,未告知用户正确的参数输入规则
修正后的代码
#include<stdio.h> #include<string.h> // 用于strlen函数获取字符串长度 int main(int argc, char* argv[]) { int counter; // 检查参数数量:含程序名共2-7个(即额外传入1-6个参数) if(argc < 2 || argc > 7) { printf("用法错误:请传入1-6个参数(含程序名共2-7个)\n"); printf("示例:%s arg1 arg2 arg3\n", argv[0]); return 1; } // 列出所有传入的参数名称 printf("传入的参数列表:"); for(counter = 0; counter < argc; counter++) { printf("%s ", argv[counter]); } printf("\n"); // 按规则输出字符 printf("处理结果:"); for(counter = 1; counter < argc; counter++) // 对应需求中从第1个参数开始计数 { if(counter % 2 == 1) // 奇数编号参数(第1、3、5...个) { printf("%c ", argv[counter][0]); // 输出首字符 } else // 偶数编号参数(第2、4、6...个) { int len = strlen(argv[counter]); printf("%c ", argv[counter][len - 1]); // 输出最后一个字符 } } printf("\n"); return 0; }
代码说明
- 参数校验:修正参数数量判断逻辑,给出清晰的用法提示和示例
- 参数列表输出:通过循环完整遍历所有
argv元素,展示全部传入参数 - 编号逻辑修正:以需求中的参数编号(从1开始)为基准,用
counter从1遍历argv,通过counter%2==1区分奇偶参数 - 偶数参数处理:使用
strlen获取参数字符串长度,取索引len-1对应的字符作为最后一个字符输出 - 变量规范:所有循环变量均正确初始化,避免未定义行为
内容的提问来源于stack exchange,提问作者billyjoe2
相关产品推荐
相关产品推荐

