文章出處

 

 

 #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int n;//記錄輸入的題目個數
int a,b,c,da;//a,b分別代表第一,第二操作數,c代表得數,da代表輸入的答案
float score=0;//記錄總分數
float j,k,L;//分別計算答對的分數
float lv;//計算答對的概率
//進行加法運算
void jia()
{
    int i;
    j=k=0;
    lv=0;
    printf("\t\t\n歡迎使用,以下是加法運算\n\n\n");
    printf("請輸入題目數:");
    fflush( stdin );
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%100;
        c=a+b;
        printf("\t\t\t\t%d+%d=?\n",a,b);
        printf("請輸入你的答案(答對一題5分):");
        fflush( stdin );
        scanf("%d",&da);
         if(da==c)  //判斷答案是否正確
         {
            printf("\n恭喜你,答對了!\n");
            j=j+5;

         }
        else
        {
            printf("\n抱歉,你答錯了!你還有一次機會\n");
            printf("\t\t\t\t%d+%d=?\n",a,b);
            printf("請輸入你的答案:");
            fflush( stdin );
            scanf("%d",&da);

            if(da==c)
            {
                printf("\n恭喜你,答對了!\n");
                k=k+5;
            }
            else  printf("\n抱歉,你又答錯了,正確答案是:%d+%d=%d\n",a,b,c);
        }
    }
    score=j+k;
    lv=(score/(5*n))*100;
    printf("\t\t\t\t加法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行減法運算
void jian()
{
    int i,temp;//temp是中間變量
    j=k=0;
    lv=0;
    printf("\t\t\n歡迎使用,以下是減法運算\n\n\n");
    printf("請輸入題目數:");
    fflush( stdin );
    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("\t\t\t\t%d-%d=?\n",a,b);
        printf("請輸入你的答案:");
        fflush( stdin );
        scanf("%d",&da);
        if(da==c)
        {
            printf("\n恭喜你,答對了!\n");
            j=j+5;
        }
        else
        {
            printf("\n抱歉,你答錯了,你還有一次機會\n");
            printf("\t\t\t\t%d-%d=?\n",a,b);
            printf("請輸入你的答案:");
            fflush( stdin );
            scanf("%d",&da);
            if(da==c)
            {
                printf("\n恭喜你,答對了!\n");
                k=k+5;
            }
            else  printf("\n抱歉,你又答錯了,正確答案為:%d-%d=%d\n",a,b,c);

        }
    }
    score=(j+k);
    lv=(score/(5*n))*100;
    printf("\t\t\t\t減法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv);
}
//進行乘法運算
void chen()
{
    int i;
    j=k=0;
    lv=0;
    printf("\t\t\n歡迎使用,以下是乘法題\n\n");
    printf("\n請輸入題目數:");
    fflush( stdin );
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        a=rand()%100;
        b=rand()%100;
        c=a*b;
        printf("\t\t\t\t%d*%d=?\n",a,b);
        printf("請輸入答案:");
        fflush( stdin );
        scanf("%d",&da);
        if(da==c)
        {
            printf("\n恭喜你,答對了!\n");
            j=j+5;
        }
        else
        {
            printf("\n抱歉,你答錯了,你還有一次機會!\n");
            printf("\t\t\t\t%d*%d=?\n",a,b);
            printf("請輸入答案:");
            fflush( stdin );
            scanf("%d",&da);
            if(da==c)
            {
                printf("\n恭喜你,答對了!\n");
                k=k+5;
            }
            else  printf("\n抱歉,又答錯了,正確答案為:%d*%d=%d\n",a,b,c);
        }
    }
    score=j+k;
    lv=(score/(5*n))*100;            
    printf("\t\t\t\t乘法運算中所得的分數為%.f分\n\t\t\t\t答對概率為百分之%.2f\n",score,lv); 
}

//進行除法運算
void chu()
{
    int i;
    char dn;//用以保存除法運算符
    float an;//用以保存除法運算得出的答案
    int fenzi,fenmu;//fenzi是分子,fenmu是分母
    j=k=L=0;
    lv=0;
    printf("\t\t\n歡迎使用,以下是除法題\n\n");
    printf("請輸入題數:");
    fflush( stdin );
    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("\t\t\t\t%d/%d=?\n",a,b);
               printf("\n請輸入你的答案:");
               fflush( stdin );
               scanf("%f",&an);
            if(an==c)
            {
                printf("恭喜你,答對了!\n");
                j=j+5;
            }
            else
            {
                   printf("抱歉,你答錯了,你還有一次機會!\n");
                   printf("\t\t\t\t%d/%d=?\n",a,b);
                   printf("\n請輸入你的答案:");
                   fflush( stdin );
                   scanf("%f",&an);
                   if(an==c)  
                   {
                       printf("恭喜你,答對了!\n");
                       k=k+5;
                   }
                   else  printf("抱歉,你又答錯了,正確答案為:%d/%d=%d\n",a,b,c);
            }
        }
        else
        {
            //dn='/';//dn保存除法運算符
            printf("\t\t\t\t%d/%d=?\n",a,b);
            printf("\n請輸入你的答案(請以分數形式輸入)\n");
            printf("\n請輸入分子:");
            fflush( stdin );
            scanf("%d",&fenzi);
            printf("請輸入分母:");
            fflush( stdin );
            scanf("%d",&fenmu);
            if(fenzi/fenmu==a/b)
            {
                printf("恭喜你,答對了!\n");
                L=L+5;
            }
             
            else
                printf("抱歉,你答錯了,正確答案為:%d/%d=%d\n",a,b,c);
        }
    }
    score=(j+k+L);
    lv=(score/(5*n))*100;
    printf("\t\t\t\t\t除法運算中所得的分數為%.f分\n\t\t\t\t\t中獎率為百分之%.2f\n",score,lv);
}
int selectmenu()
{
    int choice;
    do
    {
        printf("\t1:加法運算\n");
        printf("\t2:減法運算\n");
        printf("\t3:乘法運算\n");
        printf("\t4:除法運算\n");
        printf("\t5:謝謝使用\n");
        printf("請選擇(1-5):");
        fflush( stdin );
        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));
    system("cls");    //清楚屏幕
    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語句來判斷時,如果輸入整型,無論結果是否對都會提示對了

解決辦法:將分數分開來輸入,依次提示輸入分子與分母。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()