#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int isNumber(char c) { return (c >= '0' && c <= '9'); } int turnToInteger(char c) { return (int)(c - '0'); } int evaluate(FILE* charFile) { int result = 0; char c = fgetc(charFile); if (c == '(') { char op = fgetc(charFile); int arg1 = evaluate(charFile); int arg2 = evaluate(charFile); fgetc(charFile); // 取出')' switch (op) { case '+': result = arg1 + arg2; break; case '-': result = arg1 - arg2; break; case '*': result = arg1 * arg2; break; case '/': result = arg1 / arg2; break; default: cout << "Invalid operator: " << op << endl; exit(1); break; } } else if (isNumber(c)) { result = turnToInteger(c); } else { cout<<"Invalid character: "<<c<<endl; exit(1); } return result; } int main() { FILE* charFile; fopen_s(&charFile, "D:\\test.txt", "r"); if (!charFile) { cout << "Failed to open file!" << endl; return 1; } char line[100]; int a = 0; while (fgets(line, sizeof(line), charFile)) a++; fseek(charFile, 0, SEEK_SET); for(int i=0;i<a;i++) { int result = evaluate(charFile); fgets(line, sizeof(line), charFile); cout<< result<<endl; } fclose(charFile); return 0; }加注释
时间: 2024-01-07 09:05:32 浏览: 151
注释如下:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
// 判断字符是否为数字
int isNumber(char c)
{
return (c >= '0' && c <= '9');
}
// 将字符转化为整数
int turnToInteger(char c)
{
return (int)(c - '0');
}
// 递归计算表达式的值
int evaluate(FILE* charFile)
{
int result = 0;
char c = fgetc(charFile);
if (c == '(') // 如果字符是'(',则开始计算表达式
{
char op = fgetc(charFile); // 取出操作符
int arg1 = evaluate(charFile); // 递归计算第一个参数
int arg2 = evaluate(charFile); // 递归计算第二个参数
fgetc(charFile); // 取出')'
switch (op) // 根据操作符进行计算
{
case '+':
result = arg1 + arg2;
break;
case '-':
result = arg1 - arg2;
break;
case '*':
result = arg1 * arg2;
break;
case '/':
result = arg1 / arg2;
break;
default:
cout << "Invalid operator: " << op << endl;
exit(1);
break;
}
}
else if (isNumber(c)) // 如果字符是数字,则直接转化为整数
{
result = turnToInteger(c);
}
else // 如果字符既不是'('也不是数字,则是非法字符
{
cout<<"Invalid character: "<<c<<endl;
exit(1);
}
return result;
}
int main()
{
FILE* charFile;
fopen_s(&charFile, "D:\\test.txt", "r"); // 打开文件
if (!charFile) {
cout << "Failed to open file!" << endl;
return 1;
}
char line[100];
int a = 0;
while (fgets(line, sizeof(line), charFile)) // 统计文件行数
a++;
fseek(charFile, 0, SEEK_SET); // 将文件指针移回文件开头
for(int i=0;i<a;i++) // 循环读取每一行表达式,并计算结果
{
int result = evaluate(charFile);
fgets(line, sizeof(line), charFile); // 读取当前行的换行符
cout<< result<<endl;
}
fclose(charFile); // 关闭文件
return 0;
}
```
阅读全文