代码:
#include<stdio.h> #include<stdlib.h> #include<time.h> int n;//记录输入的题目个数 int a,b,c,da;//a,b分别代表第一,第二操作数,c代表得数,da代表输入的答案 int fenzi,fenmu;//fenzi是分子,fenmu是分母 //int score=0; //进行加法运算 void jia() { int i; printf("\t\t\n欢迎使用,以下是加法运算\n\n\n"); printf("请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; c=a+b; printf("%d+%d=?\n",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) //判断答案是否正确 printf("\n恭喜你,答对了!\n"); else { printf("\n抱歉,你答错了!你还有一次机会\n"); printf("%d+%d=?\n",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf("\n恭喜你,答对了!\n"); else printf("\n抱歉,你又答错了\n"); } } } //进行减法运算 void jian() { int i,temp;//temp是中间变量 printf("\t\t\n欢迎使用,以下是减法运算\n\n\n"); printf("请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; if(a<b)//保证得出的数不是负数 { temp=a; a=b; b=temp; } c=a-b; printf("%d-%d=?\n",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf("\n恭喜你,答对了!\n"); else { printf("\n抱歉,你答错了,你还有一次机会\n"); printf("%d-%d=?\n",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf("\n恭喜你,答对了!\n"); else printf("\n抱歉,你又答错了\n"); } } } //进行乘法运算 void chen() { int i; printf("\t\t\n欢迎使用,以下是乘法题\n\n"); printf("\n请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; c=a*b; printf("%d*%d=?\n",a,b); printf("请输入答案:"); scanf("%d",&da); if(da==c) printf("\n恭喜你,答对了!\n"); else { printf("\n抱歉,你答错了,你还有一次机会!\n"); printf("%d*%d=?\n",a,b); printf("请输入答案:"); scanf("%d",&da); if(da==c) printf("\n恭喜你,答对了!\n"); else printf("\n抱歉,又答错了!\n"); } } } //进行除法运算 void chu() { int i; char dn;//用以保存除法运算符 float an;//用以保存除法运算得出的答案 printf("\t\t\n欢迎使用,以下是除法题\n\n"); printf("请输入题数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%99+1;//使得随机出现的数不会有0,保证了除数不会出现0情况,即不会出现无意义的情况 c=a/b; if(a%b==0) //判断数能否除尽,若a对b求余为0,则说明除得尽,以整数形式输入,否则则为除不尽,提示以分数输入 { printf("%d/%d=?\n",a,b); printf("\n请输入你的答案:"); scanf("%f",&an); if(an==c) printf("恭喜你,答对了!\n"); else { printf("抱歉,你答错了,你还有一次机会!\n"); printf("%d/%d=?\n",a,b); printf("\n请输入你的答案:"); scanf("%f",&an); if(an==c) printf("恭喜你,答对了!\n"); else printf("抱歉,你又答错了!\n"); } } else { //dn=‘/‘;//dn保存除法运算符 printf("%d/%d=?\n",a,b); printf("\n请输入你的答案(请以分数形式输入)\n"); printf("\n请输入分子:"); scanf("%d",&fenzi); printf("请输入分母:"); scanf("%d",&fenmu); if(fenzi/fenmu==a/b) printf("恭喜你,答对了!\n"); else printf("抱歉,你答错了!\n"); } } } int selectmenu() { int choice; do { printf("\t1:加法运算\n"); printf("\t2:减法运算\n"); printf("\t3:乘法运算\n"); printf("\t4:除法运算\n"); printf("\t5:谢谢使用\n"); printf("请选择(1-5):"); scanf("%d",&choice); while(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5) { printf("不存在该选项,请重新选择(1-5):"); fflush(stdin); //清空输入缓存区,否则字符会一直留在缓存区,使程序进入一个死循环 scanf("%d",&choice); } }while((choice<0)||(choice>6)); return choice; } void main() { int choice; srand((unsigned)time(NULL));//随机产生0-99之间的随机数 while(1) { switch(choice) { case 1: jia(); break; case 2: jian(); break; case 3: chen(); break; case 4: chu(); break; case 5: printf("谢谢使用"); exit(0); } choice=selectmenu(); } }
总结:
1、解决了在菜单选择中如果输入的是字符的时候会提示出错,用的是fflush()函数,由于要清除的是存在缓冲区内的字符,因此用fflush(stdin),
stdin就是标准输入,一般就是指键盘输入到缓冲区里的东西,scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
① 遇空格、“回车”、“跳格”键;
② 遇宽度结束;
③ 遇非法输入;
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中 解决就要在scanf()函数之后加个fflush(stdin)。
2、解决了上一回没有解决的问题:当出现结果除不尽的情况时,用户输入的数没有以分数形式输入时,不知如何设置提示输入错误,尝试用while语句来判断时,如果输入整型,无论结果是否对都会提示对了
解决办法:将分数分开来输入,依次提示输入分子与分母。
时间: 2024-10-01 03:34:21