C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器
本文實(shí)例為大家分享了C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下
回調(diào)函數(shù)概念:
回調(diào)函數(shù)是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),也就是將函數(shù)的地址作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針回來(lái)調(diào)用其指向的函數(shù)時(shí),稱(chēng)為回調(diào)函數(shù)。
本次制作計(jì)算器的功能:
1.add —— 加法
2.sub —— 減法
3.mul —— 乘法
4.div —— 除法
0.exit —— 退出
具體來(lái)通過(guò)代碼講解:
(1)首先寫(xiě)一個(gè)菜單函數(shù),在運(yùn)行程序時(shí)打印菜單
void menu()
{
printf("*************************\n");
printf("******* 1.add *******\n");
printf("******* 2.sub *******\n");
printf("******* 3.mul *******\n");
printf("******* 4.div *******\n");
printf("******* 0.exit *******\n");
printf("*************************\n");
}
(2)寫(xiě)好四個(gè)關(guān)于加、減、乘、除操作的函數(shù)
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
(3)寫(xiě)主函數(shù),定義input是你要輸入的數(shù),用來(lái)選擇計(jì)算器的功能;然后使用do while循環(huán),內(nèi)嵌菜單函數(shù)。
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇你要進(jìn)行的操作:\n");
scanf("%d",&input);
} while (input);
return 0;
}
(4)用switch語(yǔ)句定義每個(gè)數(shù)字相對(duì)應(yīng)的功能;default代表其他選項(xiàng);Calc函數(shù)是我們接下來(lái)要寫(xiě)的回調(diào)函數(shù)。
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇你要進(jìn)行的操作:\n");
scanf("%d",&input);
switch (input)
{
case 1:
Calc(Add);
break;
case 2:
Calc(Sub);
break;
case 3:
Calc(Mul);
break;
case 4:
Calc(Div);
break;
case 0:
printf("退出計(jì)算器\n");
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
break;
}
} while (input);
return 0;
}
(5)定義Calc函數(shù),用一個(gè)函數(shù)指針作為參數(shù)接收(Add、Sub、Mul、Div)函數(shù)的地址;pf作為函數(shù)指針直接指向相應(yīng)函數(shù);然后輸出結(jié)果;(這個(gè)回調(diào)函數(shù)csdn似乎識(shí)別不了,編譯器是可以的,所以就以注釋的形式寫(xiě)了,后面也是一樣)。
void Calc() //括號(hào)內(nèi)容:int(*pf)(int, int)
{
int x = 0;
int y = 0;
int ret = 0;
printf("請(qǐng)輸入2個(gè)操作數(shù):\n");
scanf("%d %d",&x,&y);
ret = pf(x,y);
printf("%d\n",ret);
}
最后送上全部的代碼小小總計(jì)一下:
#include <stdio.h>
void menu()
{
printf("*************************\n");
printf("******* 1.add *******\n");
printf("******* 2.sub *******\n");
printf("******* 3.mul *******\n");
printf("******* 4.div *******\n");
printf("******* 0.exit *******\n");
printf("*************************\n");
}
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
void Calc() //括號(hào)內(nèi)容:int(*pf)(int, int)
{
int x = 0;
int y = 0;
int ret = 0;
printf("請(qǐng)輸入2個(gè)操作數(shù):\n");
scanf("%d %d",&x,&y);
ret = pf(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇你要進(jìn)行的操作:\n");
scanf("%d",&input);
switch (input)
{
case 1:
Calc(Add);
break;
case 2:
Calc(Sub);
break;
case 3:
Calc(Mul);
break;
case 4:
Calc(Div);
break;
case 0:
printf("退出計(jì)算器\n");
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
break;
}
} while (input);
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++實(shí)現(xiàn)HTTP協(xié)議解析的示例代碼
基本上,HTTP?是一種基于?TCP/IP?的通信協(xié)議,用于通過(guò)?Web?傳遞?HTML?文件、圖像文件、查詢(xún)結(jié)果等數(shù)據(jù)。本文將用C/C++實(shí)現(xiàn)HTTP協(xié)議解析,感興趣的可以了解一下2022-07-07
C語(yǔ)言深入分析遞歸函數(shù)的實(shí)現(xiàn)
遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無(wú)論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件2022-04-04
C++派生類(lèi)與基類(lèi)的轉(zhuǎn)換規(guī)則
基類(lèi)與派生類(lèi)對(duì)象之間有賦值兼容關(guān)系,由于派生類(lèi)中包含從基類(lèi)繼承的成員,具體表現(xiàn)在以下幾個(gè)方面,需要的朋友可以參考下2012-11-11

