單個文件內實現的話無疑是很簡單的
作爲我首個多文件編程的項目,紀念一波
關鍵點在於.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);