控制台程序,给我闺女儿写的,过程觉得有意思。拿来跟大家分享一下
c4droid吧
全部回复
仅看楼主
level 7
cerdarwang 楼主
我来盖个大楼。不知道能起来不,呵呵😊
起初这个程序,就是一个控制台提示符的人机对话。提示输入+-/*。输入后随机生成符号两边的两个数。然后再计算出两个数做加减乘除的结果。作为答案保留起来。然后我们就用scanf函数接收键盘输入。对比输入结果和之前保存的答案。来判断结果是否正确。整个思路就是这么简单。
程序里就两个关键函数。一个是出题函数,一个是判断对错函数。
判断对错函数很简单。把结果和答案作为参数输入,如果相等,说明结果正确。返回1。不想等返回0。
出题函数就是随机生成两个10以内的整数。与参数传递进来的运算符组合。生成题目。并且计算好结果保存到数据结构Timu中去。这里边使用了几个字符串函数。因为我不知道标准函数库里有没有,又急着用。有找不到手册。所以自己写了4-5个字符串函数都放在myDIY.h里了。这样有了这几个字符串处理函数,出题函数也就顺利完成了。
这样整个程序包含了3个文件。
1.主文件,控制人机界面。开始提示用户输入+-*/号来确定题目内容。然后出题,等待用户输入结果。设置循环来控制实现结果正确加上分数,出新题。总题目数5,全对100分。结果错误,重新输入答案。最多可以错3次。3次算错不加分。出新题。最后输出分数作为成绩。等待用户输入+-*/或退出q。
2.kaoshi.h,头文件包括,出题,判断结果对错,两个函数和Timu结构。Timu数据结构包括两个成员。字符串,题目,整数,答案。
3.myDIY.h,出题函数中用到的字符串处理函数。
下面跟帖中我给出源文件。
这个状态,就算是这个程序的0.0001版本吧。因为这个程序写完后给我老婆看了一下。说小孩子都不怎么认识字。看着就没意思。所以我就想还是要彩色的。图形化的才行。可是我就刚会使用数据结构,数组,指针。连文件流还不会。还不懂什么数据算法。更不会什么SDL什么的。正一筹莫展,发现精贴区有个朋友用printf函数搞了个画像素图的程序。于是就着手写图片中的程序了。呵呵。找到画笔就好办了。鼓捣着就有了这么个小东西了。如果吧里允许我可以先发apk上来。陆续把源代码和写代码的过程分享上来。
对了在写0.001版本的时候碰到个事情。估计对新手算是个小坑。typedef相当于,可以定义自己的数据类型。但是用这个数据类型再定义这个类型的指针可是不行的。相当于就是相当于,绝不是等于呵呵😊。typedef struct Timu TIM;可以用TIM来定义数据结构。TIM Tim,这个可以。可是TIM *pTIM定义结构指针是不行的。只能用typedef struct Timu * pTIM 来定义结构指针。呵呵,我是自学成才的看书看的也不细致。
2019年04月08日 15点04分 1
level 7
cerdarwang 楼主
以下主程序,
#include <stdio.h>
#include "kaoshi.h"
int main(void){
char kongzi;
int i,j,a,jieguo;
TMS tm;
pTMS ptm=&tm;
while(1){
fensu=0;
memset(tm.TM_neirong,'\0',sizeof(tm.TM_neirong)) ;
tm.TM_daan=0;
printf("请输入+,-,*符号,退出输入q\n");
scanf("%c",&kongzi);
if(kongzi=='q') exit(0);
for(i=0;i<tisu;i++){
chuti(ptm,kongzi);
printf("算一下%s=?\n",tm.TM_neirong );
for(j=0;j<huidacisu;j++){
scanf("%d",&jieguo);
a=panduan(tm.TM_daan,jieguo)*20;
if(!a)
printf(cuo);
else {
printf(dui);
fensu+=a;
break;
}
}
}
printf("这次你的分数是%d。\n",fensu);
printf("%s\n",(fensu<60)?di:gao);
while(getchar()!='\n'){}
}
return 0;
}
2019年04月08日 15点04分 2
level 7
cerdarwang 楼主
myDIY2.h
int strtodm(char* d);
void dtostrm2(int d,char* a);
void saddm2(char* q,char* h);
void reters(char *a);
int slenm(char* s);
void straddcm2(char*s,char c);
void straddcm2(char*s,char c)
{
int len;
len=slenm(s);
*(s+len)=c;
*(s+len+1)='\0';
}
//�����ַ���
int slenm(char* s)
{
int rete=0;
while(*(s+rete)!='\0') rete++;
return rete;
}
void reters(char *a)
{
char s;
int len=0,i;
while(*(a+len)!='\0')len++;
for(i=0;i<len/2;i++)
{
s=*(a+len-i-1);
*(a+len-i-1)=*(a+i);
*(a+i)=s;
}
}
void saddm2(char* q,char* h)
{
int i,qc,hc;
qc=slenm(q);
hc=slenm(h);
for(i=0;i<hc;i++)
*(q+qc+i)=*(h+i);
*(q+qc+i)='\0';
}
void dtostrm2(int d,char* a)
{
int i=0;
char sig;
if (d<0)
{
d=-d;
sig='-';
}
do
{
*(a+i)=d%10+'0';
d=d/10;
i++;
}while(d!=0);
if(sig=='-')
{
*(a+i)='-';
*(a+i+1)='\0';
}
else
*(a+i)='\0';
reters(a);
}
int strtodm(char* d)
{
int i,le,rete;
rete=0;
le=slenm(d);
for(i=0;i<le;i++)
{
rete=(*(d+i)-'0')+rete*10;
if((*(d+i)-'0')>9||(*(d+i)-'0')<0) return 0;
}
return rete;
}
2019年04月08日 15点04分 4
level 13
支持😁
2019年04月09日 13点04分 5
level 7
cerdarwang 楼主
上边的myDIY.h我个人觉得还是挺有意思的。好像干的都是重复的工作。可是我觉得就是高手们干过的事情我也干了。有那么点点的自豪感。不过我自己写的这些函数局限性还是很大的。里边根本就没有什么错误处理的能力。我也想,可是确实搞不了。因为好像这是专门的技术。我还没学会。学会了加上。
另外1.000001版本的码字过程正在进行中稍后发上来。真心觉得挺有意思的。菜单和图形我都做的头文件。引用过去就可以写自己的菜单,画自己的图形。
2019年04月09日 13点04分 6
可以,很不错了,导出应用名字好像乱码了,导出时在应用名的中文字符后面加上些空格就行了〈具体加多少这样算:中文字符数*2个空格〉
2019年04月09日 15点04分
level 7
cerdarwang 楼主
int scr_nextp(int x,int w)
{
char ww=' ';
if (w==up)
{ww='A';scr_stary--;}
else if (w==down)
{ww='B';scr_stary++;}
else if (w==right)
{ww='C';scr_starx++;}
else if (w==left)
{ww='D';scr_starx--;}
printf("\033[%d%c\033[0m",x,ww);
}
2019年04月09日 15点04分 7
level 3
运行不了
2019年07月12日 12点07分 8
level 12
[真棒][真棒][真棒]
2019年07月12日 14点07分 9
1