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 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line