先说最先看到的using namespace std;
是为了使用名称空间std
因为C++中的函数非常多,各大厂商也开发了很多自己的函数库
为了避免出现函数名重名的现象,
C++的开发者们将一些常用的函数放到std名称空间中,
各大厂商或个人也可以为自己开发的函数库命名名称空间,
以便区别。
using namespace std;
凡是函数名在std中出现的函数,都调用其中的函数。
首先你要理解如下三个函数中实现了什么。
int exp( void );
int term( void );
int factor( void );
先说int exp( void );函数
这个函数主要实现的是做加减法运算。
在判断加减法运算前,函数调用了int term( void );函数,是为了判断是否有比加减法优先级更高的运算符。
再说int term( void );函数
这个函数主要实现的是做乘除法运算。
在进行乘除法运算前,函数调用了int factor( void );函数,是为了判断是否有比乘除法运算优先级更高的运算符,即,小括号。(注:因为代码实现中没有体现出识别大括号和中括号的代码,所以这里不对中括号和大括号进行判断考虑。)
以上三个函数,是一句四则运算口诀“先乘除,后加减,有括号的先算括号中的”来编写的。
再说match()和error()函数
match()函数
主要是匹配当前获取到的字符是否与函数传入的参数是否相同,如果相同,获取下一个字符,否则调用error()函数。
Error()函数
当匹配字符发生错误时,打印"输入有错误"信息,并退出程序。
了解了如上五个函数后,现在需要知道一些系统函数是做什么的。
Isalnum();
判断此函数的参数是否为变量或字母。如果既不是数字,也不是字母,那么返回值为0。
例子:
#include
#include
void main()
{
int x = 0;
char a = '+', b = 'k', c = '3';
printf("%d, %d, %d\n", isalnum(a), isalnum(b), isalnum(c));
}
其打印结果为0(符号),2(字母),4(数字)。
ungetc()函数
功能:把一个字符退回到输入流中。
用法:int ungetc(char c, FILE *stream);
输入参数:c 要写入的字符,stream 文件流指针。
Getchar()函数
功能:每次读取一个字符。而不是读取多个字符或所有字符。
另外想说明一点,这个计算器代码中的一些函数和变量的命名不是很好,希望以后在工作中引以为戒,例如定义了int result;变量,result其实是C代码库中的关键字,最好不将关键字定义为变量,但为了其他人能更好的读取自己写的代码的意思,可以将这个变量这样定义:int iResult = 0;(定义的变量最好初始化,这样会避免很多不必要的麻烦)
也不知道我这样写你能明白不,因为不能当面讲解,所以多少有些担心。