```#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;
```c
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); //释放指向指针的二级指针内存
}
}**
```c