You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:30:48