LOVERAD 2022-02-24 12:53 采纳率: 50%
浏览 17
已结题

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


#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

  • 写回答

1条回答 默认 最新

  • 五一编程 2022-02-24 13:17
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 创建了问题 2月24日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?