猜數遊戲(多文件編程)

單個文件內實現的話無疑是很簡單的
作爲我首個多文件編程的項目,紀念一波
盛況
關鍵點在於.c文件要先全部加入到當前項目中,編譯器會按照項目文件的指引把各個.c文件分別編譯爲同名的.obj目標文件,然後再將這些.obj目標文件鏈接到一起,生成最後的.exe可執行文件。
順便吐槽一句:用vim搞多文件項目好麻煩
vim多文件編程教程在此

各文件內容
main.c

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "guess.h"
int main(void)
{
	int number;
	char reply;
	srand(time(NULL));
	do{
		number = MakeNumber();
		GuessNumber(number);
		printf("Do you want to continue(Y/N or y/n)?");
		scanf(" %c", &reply);
		while(reply != 'y' && reply != 'n' && reply != 'Y' && reply != 'N')
            scanf(" %c", &reply);
	}while(reply == 'y' || reply =='Y');
	return 0;
}

MakeNumber.c

#include <stdio.h>
#include <assert.h>
#include "MakeNumber.h"
//函數功能:生成一個隨機數
//函數參數:無
//函數返回值:生成的隨機數
int MakeNumber(void)
{
	int number;
	number = (rand() % (MAX_NUMBER - MIN_NUMBER + 1)) + MIN_NUMBER;
	assert(number >= MIN_NUMBER && number <= MAX_NUMBER);
	return number;
}

GuessNumber.c

#include <stdio.h>
#include "IsRight.h"
#include "IsValidNum.h"
//函數功能:用戶猜數字
//函數參數:number爲計算機生成的數
//函數返回值:無
void GuessNumber(int number)
{
	int guess, count = 0, right = 0, ret;
	do{
		printf("Try %d:", count+1);
		ret = scanf("%d", &guess);
		while(ret != 1 || !IsValidNum(guess))
		{
			printf("Input error!\n");
			while(getchar() != '\n');
			printf("Try %d:", count+1);
			ret = scanf("%d", &guess);
		}
		++count;
		right = IsRight(number, guess);
	}while(!right && count < MAX_TIMES);
	if(right)
		puts("Congratulations! You\'re so cool!");
	else	printf("Mission failed after %d attempts.\n", MAX_TIMES);
	return ;
}

IsValidNum.c

#include "IsValidNum.h"
int IsValidNum(int number)
{return number >= MIN_NUMBER && number <= MAX_NUMBER;}

IsRight.c

#include <stdio.h>
#include "IsRight.h"
//函數功能:比較guess和number大小,
//函數參數:number爲被猜數,guess爲用戶給出的數
//函數返回值:正確爲1
int IsRight(int number, const int guess)
{
	if(guess == number)return 1;
	if(guess < number)
		puts("Wrong! Too small!");
	if(guess > number)
		puts("Wrong! Too big!");
	return 0;
}

自定義頭文件
guess.h

int MakeNumber(void);
void GuessNumber(int number);
int IsValidNum(int number);
int IsRight(int number, int guess);

GuessNumber.h

void GuessNumber(const int number);

MakeNumber.h

#define MAX_NUMBER 100
#define MIN_NUMBER 1
int MakeNumber(void);

IsRight.h

#define MAX_TIMES 10
int IsRight(int number, int guess);

IsValidNum.h

#define MAX_NUMBER 100
#define MIN_NUMBER 1
int IsValidNum(int number);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章