c語(yǔ)言get函數(shù)為何不好 c語(yǔ)言get怎么用

C語(yǔ)言GetMouseMsg函數(shù)不好使

題主看下這個(gè)。

創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)按需定制設(shè)計(jì),是成都網(wǎng)站營(yíng)銷推廣公司,為成都報(bào)廢汽車回收提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站建設(shè)熱線:13518219792

//******友情提示:如想速度快點(diǎn),請(qǐng)改小_sleep(500)函數(shù)中參數(shù)*****??

#include?stdio.h??

#include?stdlib.h??

#include?conio.h??

#include?string.h??

#include?time.h??

const?int?H?=?8;???//地圖的高??

const?int?L?=?16;??//地圖的長(zhǎng)??

char?GameMap[H][L];???//游戲地圖??

int??key;??//按鍵保存??

int??sum?=?1,?over?=?0;??//蛇的長(zhǎng)度,?游戲結(jié)束(自吃或碰墻)??

int??dx[4]?=?{0,?0,?-1,?1};??//左、右、上、下的方向??

int??dy[4]?=?{-1,?1,?0,?0};??

struct?Snake???//蛇的每個(gè)節(jié)點(diǎn)的數(shù)據(jù)類型??

{??

int?x,?y;??//左邊位置??

int?now;???//保存當(dāng)前節(jié)點(diǎn)的方向,?0,1,2,3分別為左右上下??

}Snake[H*L];??

const?char?Shead?=?'@';??//蛇頭??

const?char?Sbody?=?'#';??//蛇身??

const?char?Sfood?=?'*';??//食物??

const?char?Snode?=?'.';??//'.'在地圖上標(biāo)示為空??

void?Initial();??//地圖的初始化??

void?Create_Food();?//在地圖上隨機(jī)產(chǎn)生食物??

void?Show();???//刷新顯示地圖??

void?Button();??//取出按鍵,并判斷方向??

void?Move();???//蛇的移動(dòng)??

void?Check_Border();??//檢查蛇頭是否越界??

void?Check_Head(int?x,?int?y);???//檢查蛇頭移動(dòng)后的位置情況??

int?main()???

{??

Initial();??

Show();??

return?0;??

}??

void?Initial()??//地圖的初始化??

{??

int?i,?j;??

int?hx,?hy;??

system("title?貪吃蛇");??//控制臺(tái)的標(biāo)題??

memset(GameMap,?'.',?sizeof(GameMap));??//初始化地圖全部為空'.'??

system("cls");??

srand(time(0));???//隨機(jī)種子??

hx?=?rand()%H;????//產(chǎn)生蛇頭??

hy?=?rand()%L;??

GameMap[hx][hy]?=?Shead;??

Snake[0].x?=?hx;??Snake[0].y?=?hy;??

Snake[0].now?=?-1;??

Create_Food();???//隨機(jī)產(chǎn)生食物??

for(i?=?0;?i??H;?i++)???//地圖顯示??

{???

for(j?=?0;?j??L;?j++)??

printf("%c",?GameMap[i][j]);??

printf("\n");??

}??

printf("\n小小C語(yǔ)言貪吃蛇\(yùn)n");??

printf("按任意方向鍵開始游戲\n");??

getch();???//先接受一個(gè)按鍵,使蛇開始往該方向走??

Button();??//取出按鍵,并判斷方向??

}??

void?Create_Food()??//在地圖上隨機(jī)產(chǎn)生食物??

{??

int?fx,?fy;??

while(1)??

{??

fx?=?rand()%H;??

fy?=?rand()%L;??

if(GameMap[fx][fy]?==?'.')??//不能出現(xiàn)在蛇所占有的位置??

{???

GameMap[fx][fy]?=?Sfood;??

break;??

}??

}??

}??

void?Show()??//刷新顯示地圖??

{??

int?i,?j;??

while(1)??

{????

_sleep(500);?//延遲半秒(1000為1s),即每半秒刷新一次地圖??

Button();???//先判斷按鍵在移動(dòng)??

Move();??

if(over)??//自吃或碰墻即游戲結(jié)束??

{???

printf("\n**游戲結(jié)束**\n");??

printf("?????_\n");??

getchar();??

break;??

}??

system("cls");???//清空地圖再顯示刷新吼的地圖??

for(i?=?0;?i??H;?i++)???

{???

for(j?=?0;?j??L;?j++)??

printf("%c",?GameMap[i][j]);??

printf("\n");??

}??

printf("\n小小C語(yǔ)言貪吃蛇\(yùn)n");??

printf("按任意方向鍵開始游戲\n");??

}??

}??

void?Button()??//取出按鍵,并判斷方向??

{??

if(kbhit()?!=?0)?//檢查當(dāng)前是否有鍵盤輸入,若有則返回一個(gè)非0值,否則返回0??

{???

while(kbhit()?!=?0)??//可能存在多個(gè)按鍵,要全部取完,以最后一個(gè)為主??

key?=?getch();?//將按鍵從控制臺(tái)中取出并保存到key中??

switch(key)??

{???//左??

case?75:??Snake[0].now?=?0;??

break;??

//右??

case?77:??Snake[0].now?=?1;???????

break;??

//上??

case?72:??Snake[0].now?=?2;??

break;??

//下??

case?80:??Snake[0].now?=?3;??

break;??

}??

}??

}??

void?Move()???//蛇的移動(dòng)??

{??

int?i,?x,?y;??

int?t?=?sum;??//保存當(dāng)前蛇的長(zhǎng)度??

//記錄當(dāng)前蛇頭的位置,并設(shè)置為空,蛇頭先移動(dòng)??

x?=?Snake[0].x;??y?=?Snake[0].y;??GameMap[x][y]?=?'.';??

Snake[0].x?=?Snake[0].x?+?dx[?Snake[0].now?];??

Snake[0].y?=?Snake[0].y?+?dy[?Snake[0].now?];??

Check_Border();???//蛇頭是否越界??

Check_Head(x,?y);??//蛇頭移動(dòng)后的位置情況,參數(shù)為:?蛇頭的開始位置??

if(sum?==?t)??//未吃到食物即蛇身移動(dòng)哦??

for(i?=?1;?i??sum;?i++)??//要從蛇尾節(jié)點(diǎn)向前移動(dòng)哦,前一個(gè)節(jié)點(diǎn)作為參照??

{??

if(i?==?1)???//尾節(jié)點(diǎn)設(shè)置為空再移動(dòng)??

GameMap[?Snake[i].x?][?Snake[i].y?]?=?'.';??

if(i?==?sum-1)??//為蛇頭后面的蛇身節(jié)點(diǎn),特殊處理??

{??

Snake[i].x?=?x;??

Snake[i].y?=?y;??

Snake[i].now?=?Snake[0].now;??

}??

else???//其他蛇身即走到前一個(gè)蛇身位置??

{??

Snake[i].x?=?Snake[i+1].x;??

Snake[i].y?=?Snake[i+1].y;??

Snake[i].now?=?Snake[i+1].now;??

}??

GameMap[?Snake[i].x?][?Snake[i].y?]?=?'#';?//移動(dòng)后要置為'#'蛇身???

}??

}??

void?Check_Border()??//檢查蛇頭是否越界??

{??

if(Snake[0].x??0?||?Snake[0].x?=?H??

||?Snake[0].y??0?||?Snake[0].y?=?L)??

over?=?1;??

}??

void?Check_Head(int?x,?int?y)??//檢查蛇頭移動(dòng)后的位置情況??

{??

if(GameMap[?Snake[0].x?][?Snake[0].y?]?==?'.')??//為空??

GameMap[?Snake[0].x?][?Snake[0].y?]?=?'@';??

else?

if(GameMap[?Snake[0].x?][?Snake[0].y?]?==?'*')??//為食物??

{??

GameMap[?Snake[0].x?][?Snake[0].y?]?=?'@';????

Snake[sum].x?=?x;???//新增加的蛇身為蛇頭后面的那個(gè)??

Snake[sum].y?=?y;??

Snake[sum].now?=?Snake[0].now;??

GameMap[?Snake[sum].x?][?Snake[sum].y?]?=?'#';???

sum++;??

Create_Food();??//食物吃完了馬上再產(chǎn)生一個(gè)食物??

}??

else?

over?=?1;??

}

簡(jiǎn)單的c語(yǔ)言問題 為什么getchar函數(shù)不執(zhí)行,問號(hào)處??

這是因?yàn)間etchar前面有一個(gè)scanf("%lf",a);

你輸入完a的值后,是否會(huì) 輸入回車 這個(gè)回車就是一個(gè)字符啊,這個(gè)字符就被getchar當(dāng)做你輸入的字符了,所以看起來(lái)像沒有執(zhí)行,其實(shí)是執(zhí)行了。

可以在getchar()前使用

fflush(stdin);

刷新標(biāo)準(zhǔn)輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄

這樣就可以輸入字符了。

c語(yǔ)言的gets函數(shù)編譯不成功阿,很短的程序?

C語(yǔ)言的gets函數(shù)一般包含在stdio.h頭文件里,如果沒有包含比頭文件那可能會(huì)有問題。第二種情況包含了還出問題,說(shuō)明你的編譯器已經(jīng)不支持這個(gè)函數(shù)了,這個(gè)函數(shù)非常不安全,容易造成溢出,建議換成fgets函數(shù)。

函數(shù)原型:

char *fgets(char *buf, int bufsize, FILE *fp);

參數(shù)解釋:

參數(shù)一是輸入字符串存放地址,

參數(shù)二是存放地址最大容量,

參數(shù)三是從哪里輸入,可以從文件也可從輸入設(shè)備,如果從輸入設(shè)備輸入這個(gè)參數(shù)可以寫成stdin,如果從文件輸入此參數(shù)為文件指針。

返回值:

輸入成功返回參數(shù)一,失敗返回NULL.

補(bǔ)充知識(shí):

為什么gets不讓用呢,我們可以看它的原型:char *gets(char *buf);

這個(gè)函數(shù)可以一直輸入知道換行或者EOF,它并不考慮buf空間是否足夠大能放下,這就容易導(dǎo)致溢出,有些別有用心的人就會(huì)利用這個(gè)漏洞去攻擊你的程序。

而fgets可以通過第二參數(shù)保證不會(huì)讀入超過buf空間的字符。

為什么在c語(yǔ)言中使用gets函數(shù)是危險(xiǎn)的

談不上“危險(xiǎn)”,

gets()

函數(shù)從標(biāo)準(zhǔn)輸入讀入

一行文本,直到讀到

新行符

EOF

字符

之前,不會(huì)停止讀入文本。也就是:gets()

不檢查邊界。因此,當(dāng)變量空間

小于

一行字符串

時(shí),

使用

gets()

會(huì)造成

溢出,程序出錯(cuò)。

例如:

#includestdio.h

int

main(

)

{

char

s[5];

printf

("input

one

line:

");

gets(s);

printf

("%s\n",s);

return

0;

}

這里,char

s[5];

最多存放

5個(gè)字符,如果

輸入一行字符

太多,

例如

輸入了

10

個(gè)字符,程序會(huì)

出錯(cuò)。出錯(cuò)其實(shí)沒什么大不了,發(fā)現(xiàn)問題,你可以修改

char

s[15];

輸入語(yǔ)句提示

printf

("input

one

line,

less

than

5

chars:

");

談不上“危險(xiǎn)”.

當(dāng)前標(biāo)題:c語(yǔ)言get函數(shù)為何不好 c語(yǔ)言get怎么用
當(dāng)前路徑:http://muchs.cn/article8/hgieop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站制作、云服務(wù)器、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)