㈠ c語言題 猜數字游戲
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
void c_input(char *str)
{
int i,j;
input:for(i=0;i<4;i++)
{
str[i]=getch();
putchar(str[i]);
}
putchar('\n');
for(i=0;i<4;i++)
{
if(str[i]<'0'||str[i]>'9')
{
printf("無效輸入,請重新輸入:");
goto input;
}
for(j=0;j<i;j++)
{
if(str[i]==str[j])
{
printf("無效輸入,請重新輸入:");
goto input;
}
}
}
}
void c_game(const char *temp)
{
int i,j,ci;
char in[4];
char out[5]="0A0B";
for(ci=0;ci<8;ci++)
{
printf("第 %d 次輸入:",ci+1);
c_input(in);
for(i=0;i<4;i++)
{
if(in[i]==temp[i])
{
out[0]++;
}
else
{
for(j=0;j<4;j++)
{
if(in[i]==temp[j])
{
out[2]++;
}
}
}
}
printf("%s\n",out);
if(strcmp(out,"4A0B")==0)
{
printf("游戲成功,按下任意鍵返回主菜單。。");
getch();
return;
}
out[0]='0';
out[2]='0';
}
printf("游戲失敗,按下任意鍵返回主菜單。。");
getch();
}
void c_rand()
{
int i,j;
char data[]="0123456789";
char temp[4];
system("cls");
printf("**隨機模式**\n\n");
for(i=0;i<4;i++)
{
j=rand()%(10-i);
temp[i]=data[j];
data[j]=data[10-i-1];
}
c_game(temp);
}
void c_printf()
{
char temp[4];
system("cls");
printf("**用戶輸入模式**\n\n");
printf("請輸入測試數據:");
c_input(temp);
system("cls");
printf("**用戶輸入模式**\n\n");
c_game(temp);
}
void main()
{
srand(time(NULL));
while(1)
{
system("cls");
printf("(1) 隨機產生數據\n");
printf("(2) 用戶輸入數據\n");
printf("(3) 退出遊戲\n");
printf("choice : ");
switch(getch())
{
case '1':c_rand();break;
case '2':c_printf();break;
case '3':exit(1);
}
}
}
在VC6下編譯通過,但因為沒有用C++特徵,也可在其它C的編譯器上試試
㈡ C語言程序設計題《猜數字游戲》
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4/*隨機抽N個數*/
#define NUM 8/*NUM次猜數的機會*/
void detect(char s[])
{
int i,j,num;
int a,b;
char ch[N];
for(num=0;num<NUM;num++)
{
a=b=0;
printf("第%d次機會:",num+1);
for(i=0;i<N;i++)
{
ch[i]=getch();
if(ch[i]>='0'&&ch[i]<='9')
{
for(j=0;j<i;j++)
if(ch[i]==ch[j]) break;
if(j<i) i--;
else
{
putchar(ch[i]);
for(j=0;j<N;j++)
{
if(ch[i]==s[j])
if(i==j) a++;
else b++;
}
}
}
else
i--;
}
printf(" %dA%dB\n",a,b);
if(a==N)
{
printf("恭喜你答對了!\n");
break;
}
}
if(num==NUM)
printf("很遺憾,正確答案為:%s\n",s);
}
main()
{
int i,j;
char s[N+1];
srand(time(0));
for(i=0;i<N;i++)
{
s[i]=rand()%10;
for(j=0;j<i;j++)
if(s[i]==s[j]) break;
if(j<i) i--;
else
{
s[i]+='0';
putchar('*');
}
}
s[i]='\0';
printf("\n總共%d次機會\n",NUM);
detect(s);
}
_______________________
運行結果:
-----------------------
****
總共8次機會
第1次機會:1234 0A2B
第2次機會:2345 0A2B
第3次機會:3456 1A0B
第4次機會:4567 0A1B
第5次機會:5678 0A1B
第6次機會:6789 1A1B
第7次機會:3792 0A2B
第8次機會:9482 1A3B
很遺憾,正確答案為:8429
請按任意鍵繼續. . .
㈢ 用c語言編寫猜數字游戲
沒時間來寫符合你題目的,這個是我以前寫過的一個猜數字游戲,系統會給出一個的1~99之間的隨機數,你來猜,看多少次可以猜中. 你看用得上不.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
int main (int argc, char **argv)
{
int d, c;
struct timeval tv;
gettimeofday (&tv, NULL);
srand (tv.tv_usec);
d = rand () % 100;
printf ("Please input a number:\n");
scanf ("%d", &c);
printf ("c=%d\n", c);
int min_num = 1;
int max_num = 99;
int num=1;
while (c != d)
{
if (c > d)
{
if( c < max_num )
max_num = c;
printf ("%d - %d\n", min_num ,max_num);
}
else if (c < d)
{
if( c > min_num )
min_num = c;
printf ("%d - %d\n", min_num ,max_num);
}
else
break;
scanf ("%d", &c);
num++;
printf("c = %d \n",c);
}
printf ("it's true:%d,num=%d\n", c,num);
return 0;
}
㈣ 猜數字題目。C語言
#include<stdio.h>
main()
{
int i=50;//假設預置數字是50
int n;
int num=0;//num紀錄輸入次數
printf("input a num you guess(1-100):");
scanf("%d",&n);
while(n!=i)
{
if(n>i)
printf("big\n");
if(n<i)
printf("small\n");
num++;
printf("input a num you guess(1-100):");
scanf("%d",&n);
}
printf("great!!\n");
if(num<11)
printf("%dturns",num);
return 0;
}
大概是這樣 因為在網吧,沒調試 不過應該不太完善 沒時間拉 稍作修改吧88
㈤ C語言編程題(設計一個猜數字的小游戲)滿意再加200分!!!!
我看了樓上幾個的答案,功能均不是很完善,所以我決定來試一試
,應該是今天最遲是明天可以貼出來了.希望不要那麼快就結貼....
哈哈.....經過了幾個小時的奮戰.. 終於搞出來了!!!!!!!!!!!!!!!!!!! 你題目要求的功能幾乎全部實現.希望你認真調試一下!!!!!!
調試環境.vc++ 6.0. 支持中文編譯的編譯器都可以調試運行的.
注意事項:如果編譯器是不支持中文顯示的就會出現亂碼的,所以最好是在支持中文顯示的編譯器上面編譯運行.例如:vc++ 6.0以上的版本!!!!
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>
#define MAX 5
struct record
{
char name[10];
int sorce;
}rec[MAX],Rec;
int n; //記錄行數
int num; //輸入的數字
void display(); //開始界面
void xuanze(); //選擇函數
void sys(int a); //操作函數
void newgame(); //新游戲
void vdisplay(); //瀏覽記錄界面
void vxuanze(); //瀏覽選擇函數
void help(); //幫助說明
void vsys(int a); //瀏覽操作函數
void viewsorce(); //按記錄的順序瀏覽
void viewname(); //按記錄的姓名瀏覽
void viewsname(); //按記錄和姓名瀏覽
void delrec(); //刪除記錄
int qushu(); //取數函數
int tishi(int aa); //提示函數
void addrec(int a); //判斷並且增加記錄
void recread(); //讀取記錄文件
void recwrite(); //寫入記錄文件
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////函數定義//////////////
void display() //開始界面
{
system("cls"); //清屏
printf(" ============================================\n");
printf(" ================數字競猜游戲================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 新游戲\n");
printf("\n");
printf(" 2: 瀏覽記錄\n");
printf("\n");
printf(" 3: 幫助說明\n");
printf("\n");
printf(" 4: 清除記錄\n");
printf("\n");
printf(" 5: 退出\n");
printf("\n");
printf(" ============================================\n");
xuanze();
}
void xuanze() //選擇函數
{
int a;
printf("請輸入你所選擇的操作數:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//選擇相應的操作數執行函數
else
{
printf("錯誤的操作數!\n");;
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
}
void sys(int a) //操作函數
{
switch(a)
{
case 1:newgame();break;
case 2:vdisplay();break;
case 3:help();break;
case 4:delrec();break;
case 5:exit(0);break; //退出
}
}
void newgame() //新游戲
{
recread();
system("cls"); //清屏
printf("\n");
printf("記錄列表顯示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空記錄--->\n");
else
printf(" 第 %d 名: 姓名: %s 分數 %d\n",i+1,rec[i].name,rec[i].sorce);
}
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();//////////////上面列出記錄文件中的記錄
/////////////////////////////////////////////////////////////////////////////
int snum; //輸入的數字
int sn=10; //機會次數
num=qushu(); //取數
L: system("cls"); //清屏
printf(" ============================================\n");
printf(" ================數字競猜游戲================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 顯示答案\n");
printf(" ============================================\n");
printf("\n");
printf("請輸入你猜想的四個數字(格式為9999樣式)你還有 %d 次機會:\n",sn);
scanf("%d",&snum);
if(snum<10000 && snum>1000 || snum==1)
{
if(snum==1)
{
printf("你放棄了本局游戲!該四個數字是: %d\n",num);
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
else
{
int flag=tishi(snum);
if(flag!=0 && sn!=0)
{
sn--;
if(sn==0)
{
printf("真是遺憾!十次機會沒有了!沒有關系!下次繼續!\n");
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
printf("請按任意鍵繼續猜...\n");
getchar();
getchar();
goto L;
}
else
{
if(sn!=0)addrec(sn);
else
{
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
}
}
}
else
{
printf("錯誤的操作數!\n");;
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
goto L;
}
}
void help() //幫助說明
{
system("cls"); //清屏
printf(" ============================================\n");
printf(" ==============數字競猜游戲幫助==============\n");
printf(" ============================================\n");
printf("\n");
printf("1.新游戲中,你可以輸入四位數,來競猜系統自動生成的四個數字!,只有十次的機會,\n");
printf(" 每次機會都有相對應的提示,十次的機會利用完了還沒有猜對的話就算失敗!四個數字的\n");
printf(" 相應格式在游戲中會有提示!當成功猜出系統給定的數字時候,就會統計你的成績.當你的\n");
printf(" 成績比記錄文件中的記錄好的時候就會提示你是否把記錄記錄到記錄文件中,當你選擇是\n");
printf(" 的時候就會接著提示你輸入你的名字.再按回車.沒有意外就會提示保存成功!\n");
printf(" 還有要說明的是記錄中的分數是越低就代表成績越好!\n");
printf("2.瀏覽記錄有三種方式!第一種只是列出記錄中的姓名;第二種是列出記錄中的成績次序\n");
printf(" 第三種是姓名跟成績一起列出來!\n");
printf("3.清除記錄就是把記錄文件初始化.即是讓記錄文件為空!\n");
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
void vdisplay() //瀏覽記錄界面
{
system("cls"); //清屏
printf(" ============================================\n");
printf(" ================數字競猜游戲================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 按記錄的順序瀏覽\n");
printf("\n");
printf(" 2: 按記錄的姓名瀏覽\n");
printf("\n");
printf(" 3: 姓名記錄全部瀏覽\n");
printf("\n");
printf(" 4: 返回上級\n");
printf("\n");
printf(" ============================================\n");
vxuanze();
}
void vxuanze() //瀏覽選擇函數
{
int a;
printf("請輸入你所選擇的操作數:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4)
{
vsys(a);
}//選擇相應的操作數執行函數
else
{
printf("錯誤的操作數!\n");;
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
vdisplay();
}
}
void vsys(int a) //瀏覽操作函數
{
switch(a)
{
case 1:viewsorce();break;
case 2:viewname();break;
case 3:viewsname();break;
case 4:display();break; //返回上級
}
}
void viewname() //按記錄的順序瀏覽
{
recread();
system("cls"); //清屏
printf("\n");
printf("記錄列表顯示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空記錄--->\n");
else
printf(" 第 %d 名: 姓名: %s\n",i+1,rec[i].name);
}
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
vdisplay();
}
void viewsorce() //按記錄的姓名瀏覽
{
recread();
system("cls"); //清屏
printf("\n");
printf("記錄列表顯示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空記錄--->\n");
else
printf(" 第 %d 名: 分數 %d\n",i+1,rec[i].sorce);
}
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
vdisplay();
}
void viewsname() //按姓名和記錄瀏覽
{
recread();
system("cls"); //清屏
printf("\n");
printf("記錄列表顯示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空記錄--->\n");
else
printf(" 第 %d 名: 姓名: %s 分數 %d\n",i+1,rec[i].name,rec[i].sorce);
}
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
vdisplay();
}
void delrec() //刪除記錄
{
recread();
for(int i=0;i<MAX;i++)
{
rec[i].sorce=0;
}
recwrite();
printf("刪除成功!\n");
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
int qushu() //取數函數
{
int a=0;
int i=0;
srand( (unsigned)time( NULL ) ); //隨機數種子設置
while(i==0)
{
i=rand(); //這樣做就是為了增加隨機性
i=i%100;
}
L: for(int j=0;j<i;j++)
{
a=a+rand(); //判斷隨機數是否是四位數 如果不是繼續取數
}
a=(a/i+rand())%10000;
if(a<1000)goto L;
return(a);
}
int tishi(int aa) //提示函數
{
int a,b,c,d;
int af,bf,cf,df;
if(aa==num)
{
printf("恭喜!你猜對了!四個數就是:%d\n",num);
return(0);
}
else
{
a=(num-num%1000)/1000;
b=(num%1000-(num%1000)%100)/100;
c=((num%1000)%100-((num%1000)%100)%10)/10; //獲取默認四個數字
d=((num%1000)%100)%10;
af=(aa-aa%1000)/1000;
bf=(aa%1000-(aa%1000)%100)/100;
cf=((aa%1000)%100-((aa%1000)%100)%10)/10; //獲取輸入的四個數字
df=((aa%1000)%100)%10;
if(af>a)printf("\n第一個數應該比 %d 小一點!\n",af);
if(af==a)printf("恭喜!第一個數字對了!應該是: %d\n",af); //數字比較
if(af<a)printf("第一個數應該比 %d 大一點!\n",af);
if(bf>b)printf("第二個數應該比 %d 小一點!\n",bf);
if(bf==b)printf("恭喜!第二個數字對了!就是: %d\n",bf); //數字比較
if(bf<b)printf("第二個數應該比 %d 大一點!\n",bf);
if(cf>c)printf("第三個數應該比 %d 小一點!\n",cf);
if(cf==c)printf("恭喜!第三個數字對了!就是: %d\n",cf); //數字比較
if(cf<c)printf("第三個數應該比 %d 大一點!\n",cf);
if(df>d)printf("第四個數應該比 %d 小一點!\n",df);
if(df==d)printf("恭喜!第四個數字對了!就是: %d\n",df); //數字比較
if(df<d)printf("第四個數應該比 %d 大一點!\n\n",df);
return(1);
}
}
void addrec(int a) //判斷並且增加記錄
{
char c;
int flag=0; //標志位
a=11-a;
recread();
for(int i=0;i<MAX;i++)
{
if(a<rec[i].sorce || rec[i].sorce==0)
{
if(i==4 || rec[i].sorce==0)
{
printf("\n");
printf("恭喜!你的成績 %d 分已經達到了前五名!\n",a);
printf("確認要保存記錄請按'y',任意鍵返回...!\n");
scanf("%s",&c);
if(c!='y')display();
rec[i+1].sorce=rec[i].sorce; //記錄後移
strcpy(rec[i+1].name,rec[i].name);
printf("請輸入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //寫入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
else
{
printf("\n");
printf("恭喜!你的成績 %d 分已經達到了前五名!\n",a);
printf("確認要保存記錄請按'y',任意鍵返回...!\n");
scanf("%s",&c);
if(c!='y')display();
for(int j=i;j<MAX-1;j++)
{
rec[j+1].sorce=rec[j].sorce; //記錄後移
strcpy(rec[j+1].name,rec[j].name);
if(rec[j+2].sorce==0)break;
}
printf("\n");
printf("請輸入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //寫入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
}
}
if(flag==0)
{
printf("\n");
printf("請按任意鍵繼續...\n");
getchar();
getchar();
display();
}
}
void recread() //讀取記錄文件
{
FILE *fp;
L: fp=fopen("E:\\rec.rec","rb");
if(fp==NULL)
{
recwrite();
goto L; //初始化
}
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{
}
else
{
printf("文件讀取失敗!");
}
fclose(fp);
}
void recwrite() //寫入記錄文件
{
FILE *fp;
fp=fopen("E:\\rec.rec","wb");
if(fp==NULL)
printf("寫入失敗!\n");
fwrite(rec,sizeof(record),MAX,fp);
fclose(fp);
}
void main()
{
display();
}
////////////////////////////////
㈥ 跪求C語言編程! 有關猜數字游戲的~~~~~
有個幾年前編好的猜數字,但是代碼找不到了,沒有沒有記憶成績的功能,樓主要不?
㈦ 一道c語言猜數字的題目~
//這是我學語言大半個月時寫的。
#include <iostream>
#include <time.h>
using namespace std ;
int RAND()
{int N ; srand (time(NULL)) ; N = rand() % 4 + 2 ; return N ;}
int main()
{
int RANDA , RANDB , NUMRANDA , NUMRANDB , NUMRANDC , NUMRANDD , RAND1 , RAND2 , L = 0 ;
char get ;
cout << "歡迎您,請按回車鍵進入游戲:"; cin.get() ; system ("CLS") ;
RANDA = RAND() ;
int NUM[RANDA] , NUMCOPY[RANDA] ;
srand (time(NULL)) ;
for (int i = 0 ; i < RANDA ; i++)
{
NUM[i] = rand() % 9 ; NUMCOPY[i] = NUM[i] ;
}
RAND1 = rand() % 1 + 1 ; RAND2 = rand() % 1 + 1 ;
for (int i = 0 ; i < RANDA ; i++)
{
if (i == RAND1 || i == RAND2) NUM[i] = 66 ;
}
cout << "隨機到的數分別為:" ;
for (int i = 0 ; i < RANDA ; i++)
{
if (NUM[i] == 66) cout << char(NUM[i]) << " " ; else cout << NUM[i] << " " ;
}
cout << endl ;
/*for (int i = 0 ; i < RANDA ; i++)
cout << NUMCOPY[i] << " " ; */
cout << "請輸入您猜到的數:" ;
for (int i = 0 ; i < RANDA ; i++)
{
cin >> NUM[i] ;
}
for (int i = 0 ; i < RANDA ; i++)
{
if (NUM[i] == NUMCOPY[i]) L++ ;
}
if (L == RANDA)
{
cout << "全對,你真他嗎是個人才!需要再來嗎?(按Q返回遊戲):" ;
if ((cin >> get) && (get != 'Q' || get != 'q')) main();
else cout << "不來了!" ;
}
else
{
cout << "回去睡覺吧!要不再來一次:" ; main() ;
}
system ("PAUSE") ;
return 0 ;
}
㈧ c語言玩 「猜數字」 的問題
i=1+rand()%4;
不能夠在number函數中,因為你如果猜不對,下一次調用number時,又重新得到了一個新的i值。所以很難猜中。
if( gamestatus==CONTINUE ){
printf("\nPlease type another number: ");
scanf("%d",&a);
number ( a );
}
可以使用循環的方式來處理。
㈨ C語言題目 編程實現數字猜謎游戲!
一個函數用於生成一個隨機數
再用一個函數進行三次循環
如果循環中輸入的數字猜對了就返回1如果三次循環結束則返回0
主數字判斷返回的結果如果是1則表示猜對否則表示猜錯
然後詢問是否繼續進行猜數字游戲
下面是一個簡單的代碼
#include<stdio.h>
#include<time.h>
voidclean_input_buf(void)
{
while(getchar()!=' ');
}
intmake_num(intnum)
{
srand(num);
return1+rand()%20;
}
intguess_num(void)
{
inti=3;
intn;
intnum;
num=make_num(clock());
while(i)
{
printf("請輸入一個你猜的數字:");
scanf("%d",&n);
if(n==num)
return1;
clean_input_buf();
--i;
}
return0;
}
intmain(intargc,char**argv)
{
charc;
printf("猜數字游戲! 游戲要猜測的數字為1-20,每個數字可以猜測3次! ");
while(1)
{
if(guess_num()==1)
printf("恭喜你,你猜中了! ");
else
printf("很遺憾,你猜錯了! ");
redo:
printf("還要繼續游戲嗎?繼續輸入Y否則輸入N! Y/N:");
c=getchar();
clean_input_buf();
if(c=='Y'||c=='y')
continue;
elseif(c=='N'||c=='n')
break;
else
{
printf("輸入錯誤,請重新輸入! ");
gotoredo;
}
}
return0;
}
㈩ C語言簡單題目猜數字
scanf("%d",&b);
while(m!=b)
{
if(b>m)
printf("too high!");
if(b<m)
printf("too low!");
c++;
scanf("%d",&b);
}
應該可以了
for(scanf("%d",&b);m!=b;scanf("%d",&b))
{
if(b>m)
printf("too high!");
if(b<m)
printf("too low!");
c++;
scanf("%d",&b);
}
最好在每個scanf("%d",&b); 後面加getchar();