當前位置:編程學習大全網 - 編程語言 - 本人用C語言寫了壹個猜拳遊戲,運行結果如圖:求大神解釋如何修改才能使使用第二個主函數時結果正常?

本人用C語言寫了壹個猜拳遊戲,運行結果如圖:求大神解釋如何修改才能使使用第二個主函數時結果正常?

樓主請看我的修改

運行結果:

#include<stdio.h>

#include<time.h>

int?User_Choice()

{

int?u;

do

{

printf("請出拳(1-石頭,2-剪刀,3-布):");

scanf("%d",&u);

switch(u)

{

case?1:printf("妳出的是石頭!\n");break;

case?2:printf("妳出的是剪刀!\n");break;

case?3:printf("妳出的是布!\n");break;

default:printf("妳的輸入有誤,請重新輸入!\n");continue;

}

}while(u<1||u>3);

return?u;

}

int?Computer_Choice()

{

int?c;

srand(time(0));

c=rand()%3+1;

switch(c)

{

case?1:printf("電腦出的是石頭!\n");break;

case?2:printf("電腦出的是剪刀!\n");break;

case?3:printf("電腦出的是布!\n");break;

}

return?c;

}

void?Compare(int?c,?int?u)

{

if((u==1?&&?c==2)||(u==2?&&?c==3)||(u==3?&&?c==1))

printf("妳贏了!\n");

if((c==1?&&?u==2)||(c==2?&&?u==3)||(c==3?&&?u==1))

printf("電腦贏了!\n");

if(u==c)

printf("妳和電腦打平了!\n");

}

void?main()

{

int?c,u;

char?ans;

do

{

?u=User_Choice();

?c=Computer_Choice();

?Compare(c,u);

?printf("還要繼續玩嗎?(y/n):");

?scanf("%c",&ans);?//用來接受回車符

?scanf("%c",&ans);

//?while(ans=='\n')?scanf("%c",&ans);?//這裏主要用來接受回車鍵

?if((ans=='n')||(ans=='N'))?

break;

}while((ans=='y')||(ans=='Y'));

printf("謝謝使用!歡迎下次再玩!\n");

}

/*

void?main()

{

int?c,u;

int?flag=1;

do

{

?u=User_Choice();

?c=Computer_Choice();

?Compare(c,u);

?printf("還要繼續玩嗎?(1/0):");

?scanf("%d",&flag);

?if(flag==0)?break;

}while(flag==1);

printf("謝謝使用!歡迎下次再玩!\n");

}

樓主可以看看這個:

C語言中scanf函數輸入回車符的問題

在用c語言編寫輸入語句的時候常用到scanf函數,初學者在剛用scanf函數輸入時,經常會遇到各種各樣的輸入錯誤,最重要的是壹定要記住scanf函數的輸入格式,scanf函數裏包含了哪些東西,輸入的時候就必須有哪些東西,比如:scanf("%c%c%c"),那麽輸入的時候就必須連續輸入3個字符,中間不能有任何空格逗號或者回車符等分開,而如果是scanf("%c,%c,%c"),那麽輸入3個字符的時候中間就必須用壹個逗號分隔。

scanf函數最常用的兩種輸入方式%d整數輸入方式,以及%c字符輸入方式。

用%d方式輸入整數時,輸入壹串數字然後按回車符,輸入就完成了。而用%c方式輸入字符時,就稍微復雜壹點。壹般來說用%c輸入字符時,當輸完以後,都習慣按壹下回車,這時回車符就成了壹個問題。

例1:

scanf("%c",&a);?/*此時輸入壹個字符,並按下回車,那麽變量a將會正確接收輸入的字符*/

scanf("%c",&b);?/*但是變量b將會接收到回車符,其值為10,或者說ASCII碼為10*/

例2:

scanf("%d",&x);?/*此時輸入壹串數字並回車,變量x將正常接收到輸入的整數*/

scanf("%d",&y);?/*變量y不會接收到回車符,需要用戶繼續輸入數字,並回車,正常接收到整數*/

例3:

scanf("%d",&x);?/*此時輸入壹串數字並回車,變量x將正常接收到輸入的整數*/

scanf("%c",&a);?/*但是變量a將會接收到回車符,其值為10,或者說ASCII碼為10*/

例4:

scanf("%d",&x);?/*此時輸入壹串數字並回車,變量x將正常接收到輸入的整數*/

scanf("%d",&y);?/*若此時輸入的是字母而不是數字,比如輸入“s”並回車*/

/*那麽變量y將不會接收到任何字符或數字,其值保持原樣,不發生任何改變*/

scanf("%c",&a);?/*此時變量a將接收到上壹步輸入的字母*/

/*即變量a中存儲的字符將是"s",而不是回車符*/

結論:

當輸入完整數或字符時,後面還需要輸入字符時,為了避免輸入的字符變成回車符,可以在輸入字符前多加壹條scanf語句來吃掉前面的回車符。此時用來吃掉回車符的scanf輸入可以用%c方式,也可以用%d方式。當用%c方式來吃掉回車符時,回車符被讀進了char類型變量中,當用%d方式來吃掉回車符時,回車符並沒有被送進int類型變量中,而是在異常的字符輸入後,被自動清除了。

*/

  • 上一篇:忘了線切割怎麽割錐度了!是單板機控制器有誰會嗎?江蘇機器
  • 下一篇:電信有哪些課程?
  • copyright 2024編程學習大全網