PHP 語法:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int com[4],self[4], /*com陣列是要儲存電腦隨機產生的數字;self陣列是要儲存使用者自己輸入到num後所分割出來的單個數字*/
a,i,j,num; /*i變數與j變數都是下面for迴圈要用到的變數;num是要讓使用者輸入一串數字*/
FILE *file1; /* 宣告檔案指標 */
file1=fopen("list.txt","w"); /* 將 file1 指標 = 開啟檔案, w 寫入 */
restart: /* 對應 RePlay 控制的標籤 */
srand(time(NULL)); /*加入此行可以使隨機的數字可以隨著時間變化而不會出現重複的*/
for (i=0;i<4;i++)
{ /*此for迴圈是要產生隨機數字*/
com[i]=(rand()%9)+1;
for (j=0;j<i;j++)
{
if (com[j]==com[i]) /*這個if判斷如果產生重複的數字則要求電腦再重新產生一數字放回原位置內*/
{
i--;
break;
}
}
}
fprintf(file1,"答案為"); /* 印答案 */
for (a=0;a<4;a++)
fprintf(file1,"%d",com[a]);
fprintf(file1,"\n"); /* 印答案 */
while (1)
{ /*這裡的while是為了要在使用者輸入錯誤時重複執行*/
int a=0,b=0,war=0; /*這裡的a,b也就是指遊戲中的a,b;war則是要判斷使用者輸入的數串是否有重複*/
printf("輸入4個數字(輸入0結束):");
scanf("%d",&num);
fprintf(file1,"你輸入的為%d ",num);
if (num==0) /*此if控制當輸入0時 */
{
printf("笨蛋~你輸囉!\n") ;
printf("答案為:") ;
for (a=0;a<4;a++)
{ printf("%d",com[a]);
}
printf("\n") ;
fprintf(file1,"程式結束");
if ( RePlay() ) /* RePlay 控制 */
{
fprintf(file1,"再玩一次\n" );
goto restart;
}
fclose( file1 ); /* 關閉檔案 */
return 0;
}
else if (num>=10000 || num<1000) /*此if是要判斷使用者輸入的數是否為4位數*/
{
printf("輸入的數字有誤" );
fprintf(file1,"輸入的數字有誤\n" );
}
else
{ /*當輸入的數確定為4位數且不是0時開始判斷a,b*/
for (i=3;i>=0;i--) /*此for迴圈將使用者輸入數串切割為單個數字放入self陣列*/
{
self[i]=num%10;
num/=10;
}
for (i=0;i<4;i++) /*此for迴圈判斷使用者輸入的數串是否有重複*/
{
for (j=0;j<i;j++)
{
if (self[j]==self[i])
{
war++; /*當使用者輸入數字重覆時war++,如果war++過則表示war不等於0可以拿來做下面判斷 */
break;
}
}
}
if (war==0) /*當war不為0時表示使用者輸入數串沒有重複*/
{
for (i=0;i<4;i++)
{
if (com[i]==self[i]) /*當數字相同且位置也相同時a++...兩個陣列內都放入i表示他們位置相同*/
a++;
else
{
for (j=0;j<4;j++)
{
if (com[i]==self[j]) /*當數字相同位置不同時b++..位置變數一個為i一個為j*/
b++;
}
}
}
if (a==4) /*輸出遊戲結果*/
{
printf("你輸入的為:%dA%bB\n,a,b");
printf("你答對囉");
fprintf(file1,"你輸入的為:%dA%bB\n,a,b");
fprintf(file1,"你答對囉");
if ( RePlay() ) /* RePlay 控制 */
{
fprintf(file1,"再玩一次\n" );
goto restart;
}
fclose( file1 ); /* 關閉檔案 */
return 0;
}
else
{
printf("你輸入的為: %d A %d B\n",a,b);
printf("請再輸入" );
fprintf(file1,"%d A %d B\n",a,b);
}
}
else /*當war不為0表示數串有重複所以重新執行while迴圈*/
{
printf("輸入數字有誤\n" );
fprintf(file1,"輸入數字有誤\n" );
}
}
}
}
/* 再玩一次 */
int RePlay ()
{
char input[10];
int num;
printf("要再玩一次嗎(Y/N) ? ");
rest:
scanf("%s",&input);
if ( input[0] == 'Y' | input[0] == 'y' )
return 1;
else if ( input[0] == 'n' | input[0] == 'N' )
{
printf("程式結束\n");
system("pause");
return 0;}
goto rest;
}
完成囉!最後的作回就是這樣。
十分感謝幫忙^^