请问图片中的问题怎么处理呢


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#include<string.h>
void run(int argc, char* argv[]);
int judgeone(char b[]);
int judgetwo(char c[]);
void zhixing(int number, char filename[]);

int main(int argc, char* argv[])
{
    run(argc, argv);
    return 0;
}
void run(int argc, char* argv[]) {
    int number; char filename[100];
    if (argc == 1)                           //不输入命令行参数的情况
    {
        strcpy(filename, "output.txt");
        printf("Please input record number:\n");
        if (scanf("%d", &number) == 1) {
            zhixing(number, filename);
        }
        else {
            printf("input wrong!");
        }
    }
    else if (argc == 3)                      //输入2个命令行参数的情况
    {
        if (judgeone(argv[1]) == 1) {
            number = *argv[1] - '0';
            if (judgetwo(argv[2]) == 1) {
                strcpy(filename, argv[2]);
                zhixing(number, filename);


            }
        }
    }
    else                                                      //输入一个或三个及以上命令行参数的情况
    {
        printf("Too many input parameters\n");
    }

}
int judgeone(char b[])
{                       //判断argv[1]是不是int型,或全是数字
    int i;
    int m = strlen(b);
    for (i = 0; i < m; i++) {
        if (b[i] >= '0' && b[i] <= '9') continue;
        else {
            return 0;
        }
    }return 1;
}
int judgetwo(char c[]) //判断用户输入的文件名是否合法
{
    int len = strlen(c);
    if (len < 4)return 0;
    else {
        char* p = &c[len - 4];
        if (strcmp(p, ".txt") != 0) return 0;
        else return 1;
    }
}
void zhixing(int number, char filename[])
{
    int i, j;
    int** a= (int**)malloc((sizeof(int*))* number);       //申请number行动态内存分配空间
    if (a == NULL) {
        printf("error!");
    }
    else {
        for (i = 0; i < number; i++)
        {
            if ((a[i] = (int*)malloc((sizeof(int)) * 3)) == NULL)       //申请3列动态内存分配空间
            {
                printf("error!");
             }
        }
        srand(time(NULL));
        for (i = 0; i < number; i++) {                     //产生随机数并将生成的随机数存入数组中
            for (j = 0; j < 3; j++)
            {
                a[i][j] = rand() % 51;
                if (j != 2)   printf("%d,", a[i][j]);
                else printf("%d", a[i][j]);

            }printf("\n");
        }

        FILE* fp;
        if ((fp = fopen(filename, "w")) == NULL)
        {
            printf("can not creat the file\n");
            exit(0);
        }                                           //建立文件指针,将文件指针指向.txt文件
        fprintf(fp, "%d\n", number);                    //将条数参数打印到文件中
        for (int i = 0; i < number; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (j != 2)
                    fprintf(fp, "%d,", a[i][j]);  //将int型数字打印到文件中
                else
                    fprintf(fp, "%d", a[i][j]);   //将int型数字打印到文件中
            }
            fprintf(fp, "\n");
        }
        fclose(fp); //关闭文件

        for (i = 0; i < number; i++)
        {
            free(a[i]);                                  //逐个释放指针内存
        }
        free(a);                                         //释放指向指针的二级指针内存

    }
}

img

img


#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#include<time.h>

#include<string.h>

void run(int argc, char* argv[]);

int judgeone(char b[]);

int judgetwo(char c[]);

void zhixing(int number, char filename[]);

 

int main(int argc, char* argv[])

{

    run(argc, argv);

    return 0;

}

void run(int argc, char* argv[]) {

    int number; char filename[100];

    if (argc == 1)                           //不输入命令行参数的情况

    {

        strcpy(filename, "output.txt");

        printf("Please input record number:\n");

        if (scanf("%d", &number) == 1) {

            zhixing(number, filename);

        }

        else {

            printf("input wrong!");

        }

    }

    else if (argc == 3)                      //输入2个命令行参数的情况

    {

        if (judgeone(argv[1]) == 1) {

            number = *argv[1] - '0';

            if (judgetwo(argv[2]) == 1) {

                strcpy(filename, argv[2]);

                zhixing(number, filename);

 

 

            }

        }

    }

    else                                                      //输入一个或三个及以上命令行参数的情况

    {

        printf("Too many input parameters\n");

    }

 

}

int judgeone(char b[])

{                       //判断argv[1]是不是int型,或全是数字

    int i;

    int m = strlen(b);

    for (i = 0; i < m; i++) {

        if (b[i] >= '0' && b[i] <= '9') continue;

        else {

            return 0;

        }

    }return 1;

}

int judgetwo(char c[]) //判断用户输入的文件名是否合法

{

    int len = strlen(c);

    if (len < 4)return 0;

    else {

        char* p = &c[len - 4];

        if (strcmp(p, ".txt") != 0) return 0;

        else return 1;

    }

}

void zhixing(int number, char filename[])

{

    int i, j;

    int** a= (int**)malloc((sizeof(int*))* number);       //申请number行动态内存分配空间

    if (a == NULL) {

        printf("error!");

    }

    else {

        for (i = 0; i < number; i++)

        {

            if ((a[i] = (int*)malloc((sizeof(int)) * 3)) == NULL)       //申请3列动态内存分配空间

            {

                printf("error!");

             }

        }

        srand(time(NULL));

        for (i = 0; i < number; i++) {                     //产生随机数并将生成的随机数存入数组中

            for (j = 0; j < 3; j++)

            {

                a[i][j] = rand() % 51;

                if (j != 2)   printf("%d,", a[i][j]);

                else printf("%d", a[i][j]);

 

            }printf("\n");

        }

 

        FILE* fp;

        if ((fp = fopen(filename, "w")) == NULL)

        {

            printf("can not creat the file\n");

            exit(0);

        }                                           //建立文件指针,将文件指针指向.txt文件

        fprintf(fp, "%d\n", number);                    //将条数参数打印到文件中

        for (int i = 0; i < number; i++)

        {

            for (int j = 0; j < 3; j++)

            {

                if (j != 2)

                    fprintf(fp, "%d,", a[i][j]);  //将int型数字打印到文件中

                else

                    fprintf(fp, "%d", a[i][j]);   //将int型数字打印到文件中

            }

            fprintf(fp, "\n");

        }

        fclose(fp); //关闭文件

 

        for (i = 0; i < number; i++)

        {

            free(a[i]);                                  //逐个释放指针内存

        }

        free(a);                                         //释放指向指针的二级指针内存

 

    }

}

我试了下没有问题

img