樓主請看我的修改
運行結果:
#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類型變量中,而是在異常的字符輸入後,被自動清除了。
*/