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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化