谁能帮我看一下下面的代码?不知道有没错?
#include "stdafx.h"#include "yunsuan.h"
#include "Evaluate.h"
#include <stdlib.h>
#include <string>
#include <stack>
using namespace std;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define TRUE 1
#define FALSE 0
#define ERROR 0//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////Evaluate::Evaluate()
{}Evaluate::~Evaluate()
{}
int Evaluate::Precede(char m,char n)
{
char f;
switch(n)
{
case'+':
case'-':
if(m=='('||m=='=')
f='<';
else
f='>';
break;
case'*':
case'/':
if(m=='*'||m=='/'||m==')')
f='>';
else
f='<';
break;
case')':switch(m)
{
case'(':
f='=';
break;
case'=':
return ERROR;
default:
f='>';
}
break;
case'=':switch(m)
{
case'=':
f='=';
break;
case'(':
return ERROR;
default:
f='>';
}
}
return f;
}
int Evaluate::In(char c)
{
switch(c)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'=':return TRUE;
default:return FALSE;
}
}
int Evaluate::Operate(int a,char t,int b)
{
int s;
switch(t)
{
case'+':
s=a+b;
break;
case'-':
s=a-b;
break;
case'*':
s=a*b;
break;
case'/':
if(b=0)
return ERROR;
else
s=a/b;
}
return s;
}int Evaluate::EvaluateExpression()
{
stack<char>EXP;
stack<int>NUM;
char x;
char c;
char t;
int a,b,k;
CString s;
int i=1;
EXP.push('#');
x=EXP.top();
c=s.GetAt(i);
while(c!='#'||x!='#')
{
if(In(c))
switch(Precede(x,c))
{
case'<':
EXP.push(c);
i++;
c=s.GetAt(i);
break;
case'=':
x=EXP.top();
EXP.pop();
i++;
c=s.GetAt(i);
break;
case'>':
t=EXP.top();
EXP.pop();
b=NUM.top();
NUM.pop();
a=NUM.top();
NUM.pop();
NUM.push(Operate(a,t,b));
i++;
s.GetAt(i);
break;
}
else if(c>='0'&&c<='9')
{
s.Format(c);
NUM.push(c);
i++;
c=s.GetAt(i);
}
else
{
return ERROR;
}
x=EXP.top();
}
k=NUM.top();
return k;
} 特别是最后的红色部分,能不能得出一个简单的表达式结果呢?其中那中间数字只有0~9 编译运行一下再把错误发上来吧…… Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFC42D.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFCO42D.DLL'
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
The thread 0xEB4 has exited with code 2 (0x2).
The program 'C:\Documents and Settings\Administrator\桌面\yunsuan\Debug\yunsuan.exe' has exited with code 2 (0x2).
编译成功,没错误!可不知道会不会有逻辑上的错误,因为搞界面的时候总不成功! ->00000000 ???
00000001 ???
00000002 ???
00000003 ???
00000004 ???
00000005 ???
00000006 ???
00000007 ???
00000008 ???
00000009 ???
0000000A ???
0000000B ???
0000000C ???
0000000D ???
0000000E ???
0000000F ???
00000010 ???
00000011 ???
00000012 ???
00000013 ???
00000014 ???
00000015 ???
00000016 ??? 感觉这里将字符c转化为整型有问题!其中s为CString
s.Format(c) 你给的代码我们无法帮你测试…… 我把原代码压缩发到你的邮箱的了,如果有空请帮我看看好吗? 代码太长,格式又乱。
页:
[1]