m0_72027734 2022-11-07 17:10 采纳率: 83.3%
浏览 13
已结题

命令行参数缺失时报错失败,只对最后一个参数缺失时报错

问题遇到的现象和发生背景

想要实现当命令行参数的数量不为四个的时候报错,缺少的数量不同报错内容不同,下文只展示了部分关键代码。

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <math.h>
int main(int argc,char **argv)
{
    FILE *fp;
    FILE *average;
    char read[100][200];
    int i=0;
    int k=0;
    float stor[8][100];
    int idr[100];
    float averanswer = 0;
    int id=0;
    int grade=0;
    int stdnumber=0;
    float gradenumber= 0;
    int gradenumberconstant=0;

    fp= fopen(argv[3],"a+");
    average= fopen("./averages.ref","w+");


    sscanf(argv[1],"%d",&stdnumber);
    sscanf(argv[2],"%d",&gradenumberconstant);

    if(argc==1){

        printf("Requires 1 to 100 students. Exiting.\n");
        return 0;
    }


    else if(argc==2){
        printf("Requires 1 to 8 grades. Exiting.\n");
        return 0;

    }

    else if(argc==3){
        printf("Input file does not exist. Exiting.\n");
        return 0;
    }

运行结果及报错内容

当在powershell 输入前两个参数不输入最后一个参数时会报最后一个"Input file does not exist. Exiting.\n"的错然后退出程序,而只输入一个命令行参数或者不输入命令行参数的时候则不会报错直接退出程序(就是说"Requires 1 to 100 students. Exiting.\n"和"Requires 1 to 8 grades. Exiting.\n"不会被答应出来)。

我的解答思路和尝试过的方法

尝试使用当命令行参数argv[1]==NULL以及argv[2]==NULL时报错,结果失败仍然无法对前两个参数缺失时报错,最后一个参数缺失时正常报错。

我想要达到的结果

希望能够在缺少对应的命令行参数的时候报相应的错误。

  • 写回答

2条回答 默认 最新

  • 伍六七0804 2022-11-07 17:15
    关注
    
    #include <stdio.h>
    #include <math.h>
    int main(int argc, char **argv)
    {
        FILE *fp;
        FILE *average;
        char read[100][200];
        int i = 0;
        int k = 0;
        float stor[8][100];
        int idr[100];
        float averanswer = 0;
        int id = 0;
        int grade = 0;
        int stdnumber = 0;
        float gradenumber = 0;
        int gradenumberconstant = 0;
    
        if (argc == 1)
        {
    
            printf("Requires 1 to 100 students. Exiting.\n");
            return 0;
        }
    
        else if (argc == 2)
        {
            printf("Requires 1 to 8 grades. Exiting.\n");
            return 0;
        }
    
        else if (argc == 3)
        {
            printf("Input file does not exist. Exiting.\n");
            return 0;
        }
        fp = fopen(argv[3], "a+");
        average = fopen("./averages.ref", "w+");
    
        sscanf(argv[1], "%d", &stdnumber);
        sscanf(argv[2], "%d", &gradenumberconstant);
    
        return 0;
    }
    

    条件判断往前提 不然会提前使用argv

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 w10部分软件不能联网
  • ¥15 关于安装hbase的问题(操作系统-windows)
  • ¥15 cadence617版本,如何做一个参数可调的反相器
  • ¥15 novnc连接pve虚拟机报错安全协议不支持262
  • ¥15 设备精度0.03给多少公差能达到CPK1.33
  • ¥15 qt+ffmpeg报错non-existing PPS 0 referenced
  • ¥15 FOC simulink
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配