📄 main.cpp
字号:
#include "StdAfx.h"
void main()
{
int inputnum = 0,outputnum = 0;
int ifhelp;
char **cmd;
LinkList *inputsignal, *outputsignal;
char order[MAXSIZE], inputfile[MAXSIZE], mapfile[MAXSIZE], outputfile[MAXSIZE], bmpfile[MAXSIZE];
printf("欢迎使用数字电路模拟系统\n");
while(1)
{
ifhelp = 0;
printf("请输入命令,如需帮助请键入help\n");
fflush(stdin);
gets(order);
cmd = DevideOrder(order, ifhelp);
if (ifhelp != 1)
{
if(cmd != NULL)
{
strcpy(inputfile, *(cmd+1));
strcpy(mapfile, *(cmd+2));
strcpy(outputfile, *(cmd+3));
strcpy(bmpfile, *(cmd+4));
if(IsFileExist(inputfile, mapfile, outputfile, bmpfile)==1)
break; //跳出for
}
else
{
printf("命令不合法,重新键入命令请按y,结束程序请按其他键\n");
switch(getchar())
{
case 'y':
case 'Y':
break; //跳出switch,继续循环
default:
exit(1);
}
}
}
}
inputsignal = ReadInputSignal(inputfile,inputnum);
for (int i = 0; i < inputnum; i++)
{
GetSumtime(inputsignal[i]);
}
outputsignal = DealInputSignal(mapfile, inputsignal, outputnum);
Output(outputsignal,outputfile,outputnum);
GetBMP(outputsignal,bmpfile,outputnum);
// Output(outputsignal, outputfile, outputnum);
}
//*************检测文件合法性函数********************************************************************
int IsFileExist(char* inputfile, char*mapfile, char*outputfile, char *bmpfile)
{
//判断inputfile和mapfile是否存在
if(access(inputfile,0) != 0 || access(mapfile,0) != 0)
{
printf("输入文件不存在,重新键入命令请按y,结束程序请按其他键\n");
switch(getchar())
{
case 'y':
case 'Y':
return 0;
break;
default:
exit(1);
}
}
//判断outputfile和bmpfile是否存在
if(access(outputfile,0)==0 || access(bmpfile,0)==0)
{
printf("存在与输出文件同名的文件,是否覆盖?(是按y,否按其它键)\n");
switch(getchar())
{
case 'y':
case 'Y':
return 1;
break;
default:
printf("请重新输入命令\n");
return 0;
break;
}
}
else
return 1;
}
//*******************************************************************************************
//******拆分命令函数,命令不合法则返回NULL****************************************************
char ** DevideOrder(char *order, int &ifhelp)
{
unsigned int i, j, n = 0;
char **temp;
char *cmd[5];
char command[5][50];
for (i=0; i <= strlen(order);) //去掉命令开头的空格
{
if(order[0] != ' ')
break;
if(order[i] == ' ')
strcpy(order, order + i + 1);
else
i++;
}
for (i = 0, j = 1; j <= strlen(order);)//去掉中间及末尾的多余空格
{
if(order[i] == ' '&&(order[j] == ' ' || order[j] == '\0'))
strcpy(order+i,order+j);
else
{
i++;
j++;
}
}
for (int k = 0; k < strlen(command[0]); k++)//第一个关键词变为小写
{
command[0][k] = tolower(command[0][k]);
}
for (i = 0; i <= strlen(order); i++)//统计空格数并由此判断命令是否合法
{
if(order[i] == ' ')
n++;
}
if(n==0&&(strcmp(order,"help")==0))
{
printf("程序接收如下命令,以文本形式输出\nSimulator [inputfile] [mapfile] [outputfile]\n\n");
printf("如有图像输出,命令行形式如下\nSimulator [inputfile] [mapfile] [outputfile] [bmpfile]\n\n");
ifhelp = 1;
return NULL;
}
if(n != 4)
return NULL;
for (j = 0; j <= 4; j++)//拆分命令
{
i=0;
while (order[i] != ' ' && i < strlen(order))
{
command[j][i] = order[i];
i++;
}
command[j][i] = '\0';
strcpy(order, order+i+1);
}
// cout<<command[0]<<endl;
if(strcmp(command[0], "simulator") != 0) //判断命令是否以simulator开头
{
printf("第一个关键字错误\n");
return NULL;
}
for (i=strlen(command[3])-1;i>0;i--)
{
command[3][i] = tolower(command[3][i]);
if(command[3][i]=='.')
{
if(strcmp((command[3]+i+1),"txt")==0)
break;
else
{
printf("outputfile 后缀名错误,应为txt\n");
return NULL;
}
}
}
if(i==0)
{
printf("outputfile 后缀名错误,应为txt\n");
return NULL;
}
for (i=strlen(command[4])-1;i>0;i--)
{
command[4][i] = tolower(command[4][i]);
if(command[4][i]=='.')
{
if(strcmp((command[4]+i+1),"bmp")==0)
break;
else
{
printf("bmpfile 后缀名错误,应为bmp\n");
return NULL;
}
}
}
if(i==0)
{
printf("bmptfile 后缀名错误,应为bmp\n");
return NULL;
}
for (i=0; i <= 4; i++)
{
cmd[i] = command[i];
}
temp = cmd;
return temp;
}
//**************************************************************************************************
//************求sumtime函数*************************************************************************
void GetSumtime(const LinkList inputsignal)
{
LinkList ptr = inputsignal;
LinkList ptr2 = ptr;
ptr->data.sumtime = ptr->data.lasttime;
while(ptr2->next != 0)
{
ptr2 = ptr->next;
ptr2->data.sumtime = ptr->data.sumtime + ptr2->data.lasttime;
ptr = ptr->next;
}
}
//**************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -