看书看累了写的一个快乐程序,有两个版本的,一个是system(“pause”)终止的,一个是cin.get()终止的。是一个二分法做小尺子的,灵感来自c++primer plus上但是比他更好的完全自己写的程序。
虽然看上去很多,但是很多行都是用来暂停时间的,main函数的最后6行是两个版本的区别,改一下那里的注释即可
//ruler.cpp
#include"iostream"//a symbol of ricrision program
#include"ctime"
const int Max = 101;
void dichotomy(char x[],int level,int high,int low);
int main()
{
//using namespace std;//pratice not using it.
int Len,Divs;//那么这里就有个问题,前者是不是必须要偶数呢?
std::cout <<"这是一个通过二分法设计的尺子\n请输入想要的尺子的长度(不超过100的正偶数)和二分的次数:";
//std::cin >> Len >> Divs;
while(!(std::cin >> Len>> Divs))
{
std::cin.clear();
while(std::cin.get()!='\n')
;
/*if()
{
std::cout << "等我康康\n";
break;
}*/
// else
//{
std::cout << "⊙﹏⊙∥不,这数据不正常,emm请重新输入吧\n输入你想要的尺子的长度(不超过100的正偶数)和二分的次数哦:";
// }
}
clock_t delay = CLOCKS_PER_SEC;
while(1)
{
std::cout << "等一下!让我康康(^~^)";
clock_t start = clock();
for(int i = 0;i<3;i++)
{
std::cout << ". ";
while(clock()-start < delay*0.5)
;
}
if(Len > 100||Len<=0)
{
std::cout << "长度过大,请重新指定!\n请输入长度:";
std::cin >> Len;
}
else if(Len%2)
{
std::cout << "非正偶数影响美观哦\n请重新输入长度和次数:";
std::cin >> Len >>Divs;
}
else
{
std::cout << "输入正确啦v(^_^)v\n" << "正在准备原材料\n";
for(int i = 0;i<3;i++)
{
std::cout << ". ";
start = clock();
while(clock()-start < delay*0.7)
;
}
std::cout << "正在加工\n";
for(int i = 0;i<3;i++)
{
std::cout << ". ";
start = clock();
while(clock()-start < delay*0.7)
;
}std::cout << "正在偷偷运输\n";
for(int i = 0;i<3;i++)
{
std::cout << ". ";
start = clock();
while(clock()-start < delay*0.7)
;
}
std::cout <<"当当当当!\n";
while(clock()-start < delay*0.7)
;
break;
}
}
char x[Max];
for (int i = 0;i<Len;i++)
{
x[i] = ' ';
}
x[Len] = '\0';
int low = 0,high = Len-1;
x[low] = x[high] = '|';
std::cout << x <<"\n\n";
for (int i = 1;i<=Divs;i++)
{
dichotomy(x,i,high,low);
std::cout << x<< std::endl<<std::endl;
}
//std::cout << "快乐时间结束了,嘿嘿。\n";//注释这两行是get()版本
//system("pause");
std::cout << "快乐时间结束了,但是我猜你一定想不到可以输入回车结束程序,嘿嘿。";//去掉上面两行注释并且注释这三行则是system版本
std::cin.get();
std::cin.get();
return 0;
}
void dichotomy(char x[],int level,int high,int low)
{
if(level == 0)
return;
else
{
int mid = (high+low)/2;
x[mid] = '|';
dichotomy(x,level-1,mid,low);
dichotomy(x,level-1,high,mid);
}
}