C语言STUDY
函數(shù)聲明:
返回值類型 函數(shù)名(形參類型 變量名,類型 變量名,...);
1.一般根據(jù)數(shù)據(jù)的功能來取函數(shù)名,全部小寫單詞之間用
2.參數(shù)的個(gè)數(shù),類型由于函數(shù)的功能所需要的數(shù)據(jù)決定,被調(diào)用時(shí)由調(diào)用者提供,如果不需要?jiǎng)t寫void。
3.返回值類型根據(jù)函數(shù)的結(jié)果類型決定,如果沒有返回值則寫void
4.如果函數(shù)的定義出現(xiàn)在調(diào)用之前,聲明可以省略
5.函數(shù)聲明時(shí),參數(shù)的變量名可以省略
6.如果不寫返回值,默認(rèn)為int類型
函數(shù)定義:
返回值類型 函數(shù)名(類型 變量名,類型 變量名....)、
{
函數(shù)體;
return 數(shù)據(jù);
}
函數(shù)的調(diào)用:
函數(shù)(數(shù)據(jù)1,數(shù)據(jù)2...);
返回值會(huì)在函數(shù)執(zhí)行完成后放置在調(diào)用位置,處理方法
1、存儲(chǔ)在變量中,長(zhǎng)期使用。
2、立即使用,可以顯示或參與運(yùn)算。
輸出緩沖區(qū):
當(dāng)使用printf/puts/putchar,等函數(shù)顯示數(shù)據(jù)時(shí),并不會(huì)直接顯示在屏幕上,
而是先放入到緩沖區(qū)中(提高程序的運(yùn)行效率),當(dāng)滿足一些條件時(shí)才會(huì)顯示在屏幕上;
1.遇到\n
2.從輸出轉(zhuǎn)換到輸入狀態(tài)
3.程序結(jié)束
4.當(dāng)緩沖區(qū)滿4k
5.手動(dòng)刷新 fflush(stdout);
輸入緩沖區(qū):
在終端中輸入數(shù)據(jù)會(huì)先存儲(chǔ)到輸入緩沖區(qū)中沒然后在根據(jù)占位解析成對(duì)應(yīng)的數(shù)據(jù),如果前一次輸入的數(shù)據(jù)有殘留的垃圾,會(huì)影響后續(xù)數(shù)據(jù)的輸入。
1.輸入字符時(shí)前一次的數(shù)據(jù)會(huì)殘留一個(gè)空格或‘\n’,解決方法在之前加一個(gè)空格
2.如果輸入時(shí)有若干個(gè)垃圾數(shù)據(jù),會(huì)影響接下來的所有數(shù)據(jù)的輸入
1.使用正則表達(dá)式,注意:必須確定有垃圾數(shù)據(jù)時(shí)再使用
scanf(“%[^\n”);//從緩沖區(qū)中獲取數(shù)據(jù)但不存儲(chǔ)到變量中
scanf("%*c");
2.設(shè)置緩沖區(qū)中的位置指針
stdin->_IO_read_ptr 開始位置
stdin->_IO_read_end 結(jié)束位置
stdin->_IO_read_ptr=stdin->_IO_read_end;
五子棋:
分析數(shù)據(jù):
char board[15][15];棋盤
char key_x,key_y;接受棋子坐標(biāo)。
char role;記錄角色。
業(yè)務(wù)邏輯:
1、初始化棋盤,所有位置賦值為“*”;
while(turn)
{
2、清理屏幕,顯示棋盤。
3、請(qǐng)輸入棋盤的坐標(biāo)
檢查坐標(biāo)是否合法、是否已有棋子
4、檢查是否形成五子
break;
5、切換角色
}
代碼:
include <stdio.h>
include <stdlib.h>
include <stdbool.h>
include <getch.h>
char board[15][15];
char key_x=7,key_y=7;
char role = '@';
// 棋盤初始化
void init_board(void);
// 顯示棋盤
void show_board(void);
// 落子
void get_key(void);
// 檢查是否有五子
bool check_key(void);
int main()
{
init_board();
while(true)
{
show_board();
get_key();
// 檢查五子
if(check_key())
{
show_board();
printf("恭喜%c勝利,游戲結(jié)束\n",role);
break;
}
// 角色切換
role = role=='@'?'#':'@';
}
}
// 棋盤初始化
void init_board(void)
{
for(int x=0; x<15; x++)
{
for(int y=0; y<15; y++)
{
board[x][y] = '*';
}
}
}
// 顯示棋盤
void show_board(void)
{
system("clear");
for(int x=0; x<15; x++)
{
for(int y=0; y<15; y++)
{
printf(" %c",board[x][y]);
}
printf("\n");
}
}
// 落子
void get_key(void)
{
/
printf("請(qǐng)%c落子,輸入棋子坐標(biāo):",role);
scanf("%hhd%hhd",&key_x,&key_y);
if(key_x < 15 && key_x >= 0 && key_y < 15 && key_x >= 0 && '' == board[key_x][key_y])
{
board[key_x][key_y] = role;
}
/
printf(" -----------請(qǐng)%c落子-----------\n",role);
while(true)
{
// 設(shè)置光標(biāo)的位置
printf("\33[%hhd;%hhdH",key_x+1,(key_y+1)2);
switch(getch())
{
case 183:key_x > 0 && key_x--; break;
case 184:key_x <14 && key_x++; break;
case 185:key_y <14 && key_y++; break;
case 186:key_y > 0 && key_y--; break;
case 10:if('*' == board[key_x][key_y])
{
board[key_x][key_y] = role;
return;
}
}
}
}
// 檢查是否有五子
bool check_key(void)
{
// 用于記錄相同棋子的數(shù)量
int count = 0;
// 向左上查找
for(int x=key_x-1,y=key_y-1; x>=0&&y>=0; x--,y--)
{
if(board[x][y] != board[key_x][key_y])
{
break;
}
count++;
}
// 向右下查找
for(int x=key_x+1,y=key_y+1; x<15&&y<15; x++,y++)
{
if(board[x][y] != board[key_x][key_y])
{
break;
}
count++;
}
if(count >= 4)
{
return true;
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/zhangjinguang/p/10845463.html
總結(jié)
- 上一篇: Python【每日一问】21
- 下一篇: vcenter6.0+EXSI6.0