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

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

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

用代码块功能插入代码,请勿粘贴截图
#include 
#include 
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时报错,结果失败仍然无法对前两个参数缺失时报错,最后一个参数缺失时正常报错。

我想要达到的结果

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


#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