代码将计算器和倒计时集成在一起,用函数封装
计算器代码尝试了异常处理函数,判断除零错误。
相比个位数倒计时的实现,此代码实现了多位数倒计时(代码设置为十位数,理论上可以无限大),使用结构体和字符串拼接存储时间并打印。
源代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
int cal();
int show_word();
struct out {
char line1[100]=" ";
char line2[100]=" ";
char line3[100]=" ";
char line4[100]=" ";
char line5[100]=" ";
char line6[100]=" ";
char line7[100]=" ";
};
//void line1(char a){
// for (int i=0;i<6;i++) printf("%c",a);
// printf("\n");
//}
//
//void line2(char a){
// for (int i=0;i<6;i++) printf("%c\n",a);
//}
//
//void line3(char a){
// for (int i=0;i<6;i++) printf(" %c\n",a);
//}
//void line4(char a){
// for (int i=0;i<6;i++) printf("%c %c\n",a,a);
//}
void print_num(int num,char a){
int pri_num2[10];
for (int i=0;i<10;i++) pri_num2[i]=-1;
int cnt=0;
for (int i=0;i<10;i++){
pri_num2[i]=num%10;
num=num/10;
cnt++;
if (num<10){
pri_num2[i+1]=num;//每一位存储进数组 最前面的是最大位
cnt++;
break;
}
}
int pri_num[10];
for (int i=0;i<10;i++) pri_num[i]=-1;
for (int i=0;i<cnt;i++) {
pri_num[i]=pri_num2[cnt-i-1];
}
struct out prt;
char line1[6]=" ";
char line2[6]=" ";
char line3[6]=" ";
char line4[6]=" ";
char line5[6]=" ";
for (int i=0;i<4;i++) line1[i]=a;//一整行
line2[3]=a;//最后一个
line3[0]=a;//第一个
for (int i=0;i<4;i+=3) line4[i]=a;//第一个和最后一个
for (int p=0;p<10;p++){
switch(pri_num[p]){
case 1:
strcat(prt.line1,line2);
strcat(prt.line2,line2);
strcat(prt.line3,line2);
strcat(prt.line4,line2);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line2);
break;
case 2:
strcat(prt.line1,line1);
strcat(prt.line2,line2);
strcat(prt.line3,line2);
strcat(prt.line4,line1);
strcat(prt.line5,line3);
strcat(prt.line6,line3);
strcat(prt.line7,line1);
break;
case 3:
strcat(prt.line1,line1);
strcat(prt.line2,line2);
strcat(prt.line3,line2);
strcat(prt.line4,line1);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line1);
break;
case 4:
strcat(prt.line1,line4);
strcat(prt.line2,line4);
strcat(prt.line3,line4);
strcat(prt.line4,line1);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line2);
break;
case 5:
strcat(prt.line1,line1);
strcat(prt.line2,line3);
strcat(prt.line3,line3);
strcat(prt.line4,line1);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line1);
break;
case 6:
strcat(prt.line1,line1);
strcat(prt.line2,line3);
strcat(prt.line3,line3);
strcat(prt.line4,line1);
strcat(prt.line5,line4);
strcat(prt.line6,line4);
strcat(prt.line7,line1);
break;
case 7:
strcat(prt.line1,line1);
strcat(prt.line2,line2);
strcat(prt.line3,line2);
strcat(prt.line4,line2);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line2);
break;
case 8:
strcat(prt.line1,line1);
strcat(prt.line2,line4);
strcat(prt.line3,line4);
strcat(prt.line4,line1);
strcat(prt.line5,line4);
strcat(prt.line6,line4);
strcat(prt.line7,line1);
break;
case 9:
strcat(prt.line1,line1);
strcat(prt.line2,line4);
strcat(prt.line3,line4);
strcat(prt.line4,line1);
strcat(prt.line5,line2);
strcat(prt.line6,line2);
strcat(prt.line7,line1);
break;
case 0:
strcat(prt.line1,line1);
strcat(prt.line2,line4);
strcat(prt.line3,line4);
strcat(prt.line4,line4);
strcat(prt.line5,line4);
strcat(prt.line6,line4);
strcat(prt.line7,line1);
break;
default:
printf("%s\n",prt.line1);
printf("%s\n",prt.line2);
printf("%s\n",prt.line3);
printf("%s\n",prt.line4);
printf("%s\n",prt.line5);
printf("%s\n",prt.line6);
printf("%s\n",prt.line7);
return;
}
}
}
int main(){
int cmd;
while(1){
printf("输入1进计算器,输入2进倒计时,0退出\n>>");
scanf("%d",&cmd);
switch(cmd){
case 0:
return 0;
case 1:
cal();
break;
case 2:
show_word();
break;
}
}
return 0;
}
int cal(){
double num=0.0;
printf("请输入数据\n>>");
scanf("%lf",&num);
getchar();
while(1){
double num2=0;
char user_cmd;
printf("请输入运算符(+ - * / % = 输入'q'退出程序)\n>>");
scanf("%c",&user_cmd);
getchar();
if(user_cmd=='='){
printf("result:%lf\n",num);
num=0;
}else{
if (num=='q') return 0;
printf("请输入数据\n>>");
scanf("%lf",&num2);
getchar();
switch(user_cmd){
case '+':
num+=num2;
break;
case '-':
num-=num2;
break;
case '*':
num*=num2;
break;
case '/':
try{
num/=num2;
if(num2==0) throw -1;
}catch(int d){
printf("除数不能为零!\n");
}
break;
case '%':
num=(int)num%(int)num2;
break;
case '^':
num=pow(num,num2);
break;
case 'q':
return 0;
}
}
}
}
int show_word(){
char use;
int num;
getchar();
printf("请输入字符\n>>");
scanf("%c",&use);
getchar();
printf("请输入数字\n>>");
scanf("%d",&num);
while(num>=0){
print_num(num,use);
Sleep(1000);
system("cls");
num--;
}
}