| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:这个错误咋回事啊
只看楼主 加入收藏
cmlove083
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-1
收藏
 问题点数:0 回复次数:7 
这个错误咋回事啊

这是在网上找到的一个源程序,在TC下能运行,但是在VC++下就有一个错误,偶笨找不出来,现急用!
希望哪位大虾指点下,感激!

源程序如下:

#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
float *base;
float *top;
float *move;
int stacksize;
}SqStack1; /*结构类型1,用于定义存储操作数的栈*/
typedef struct{
char *base;
char *top;
char *move;
int stacksize;
}SqStack2; /*结构类型2,用于定义存储操作符号的栈*/
int menu_select();
void About(); /*设计者个人信息输出*/
int InitStack1(SqStack1 *S); /* 初始化类型1的栈 */
int InitStack2(SqStack2 *S); /* 初始化类型2的栈 */
float GetTop1(SqStack1 *S); /* 取类型1的栈的栈顶元素 */
char GetTop2(SqStack2 *S); /* 取类型2的栈的栈顶元素 */
int Push1(SqStack1 *S,float e); /* 入栈 */
int Push2(SqStack2 *S,char e);
float Pop1(SqStack1 *S); /* 出栈 */
int Pop2(SqStack2 *S);
void Show1(SqStack1 *S1,SqStack2 *S2,int count); /* 演示函数1,输出S1,S2内容,配合Mainwork1完成演示功能 */
void DestroyStack(SqStack1 *S1,SqStack2 *S2);
void Inputs(char *prompt, char *s, int count); /* 完成录入字符串的存储 */
int In(char c); /* 判断字符与数字的功能函数 */
float Operate(float a,char b,float c); /* 操作函数,执行具体运算 */
char Precede(char a,char b); /* 判断符号优先级函数 */
float ReadNum(char *s,int *j); /* 数字读入函数,可将字符串表示的实数转化为实数返回 */
int Mainwork1(char *a,SqStack2 *OPTR,SqStack1 *OPND); /* 主要工作函数1,根据符号优先级完成相应栈操作,调节屏幕配合Show1显示演示结果 */

main()
{
char a[100];
SqStack1 S1,*OPND;
SqStack2 S2,*OPTR;
OPTR=&S2;OPND=&S1;
clrscr();
About();
for(;;)
{
switch(menu_select()) /*调用主菜单函数,返回值做为开关语句的条件*/
{
case 1:
printf("Input a expression accurately and end it with the char '#'\n");
Inputs("Expression:\n",a,80);break;
case 2:Mainwork1(a,OPTR,OPND) ;break;
case 3:About();break;
case 4:DestroyStack(OPND,OPTR);
exit(0);
}
}
}

int menu_select()
{
char *menu[]={
"",
"",
"",
"",
"",
" ***************MENU***************", /*定义菜单字符串数组*/
" ",
" 1.Input Expression",
" 2.Show Process",
" 3.About me",
" 4.Quit",
"",
"",
" **********************************",
" By zuozhe",
" 2006-12-30",};
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,25);
printf("Any key to enter menu......\n");
getch();
clrscr();
for(i=0;i<16;i++) /*输出主菜单数组*/
{ gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21);
do{printf("\n Enter your choice(1~4):");
scanf("%s",s);
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<1||c>4);
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
int InitStack1(SqStack1 *S)
{
(*S).base=(float*)malloc(STACK_INIT_SIZE*sizeof(float));
if(!(*S).base) exit(0);
(*S).top=(*S).base;
(*S).move=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return 1;
}/*InitStack1*/
int InitStack2(SqStack2 *S)
{
(*S).base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(!(*S).base) exit(0);
(*S).top=(*S).base;
(*S).move=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return 1;
}/*InitStack2*/
float GetTop1(SqStack1 *S)
{ float e;
if((*S).top==(*S).base) return 0;
e=*((*S).top-1);
return e;
}/*GetTop1*/
char GetTop2(SqStack2 *S)
{ char e;
if((*S).top==(*S).base) return 0;
e=*((*S).top-1);
return e;
}/*GetTop2*/
int Push1(SqStack1 *S,float e)
{
*(*S).top++=e;
return 1;
}/*Push1*/
int Push2(SqStack2 *S,char e)
{
*(*S).top++=e;
return 1;
}/*Push2*/
float Pop1(SqStack1 *S)
{
float e;
if((*S).top==(*S).base) return 0;
e=*--(*S).top;
return e;
}/*Pop1*/
int Pop2(SqStack2 *S)
{
char e;
if((*S).top==(*S).base) return 0;
e=*--(*S).top;
return e;
}/*Pop2*/

void Show1(SqStack1 *S1,SqStack2 *S2,int count)
{ printf("%d",count ); /*当前步序输出*/
gotoxy(5,count+3);
while((*S2).move!=(*S2).top) {printf("%c",*((*S2).move++));} /*输出符号栈内容*/
gotoxy(15,count+3);
while((*S1).move!=(*S1).top) {printf("%g ",*((*S1).move++));} /*输出操作数栈内容*/
(*S1).move=(*S1).base;
(*S2).move=(*S2).base; /*回朔结构指针*/
}
void DestroyStack(SqStack1 *S1,SqStack2 *S2)
{
(*S1).top=(*S1).base+(*S1).stacksize-1;
for((*S1).move=(*S1).base+1;(*S1).move!=(*S1).top;(*S1).move++)
{free((*S1).base);(*S1).base=(*S1).move;}
free((*S1).base);free((*S1).top);
(*S2).top=(*S2).base+(*S2).stacksize-1;
for((*S2).move=(*S2).base+1;(*S2).move!=(*S2).top;(*S2).move++)
{free((*S2).base);(*S2).base=(*S2).move;}
free((*S2).base);free((*S2).top);
}
void Inputs(char *prompt, char *s, int count) /*prompt 输出提示信息,*s为字符串指针*/
{
char p[255];
do{printf(prompt); /*显示提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)>count)printf("\n Too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
int In(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.'||c=='^') return 1;
else return 0;
}/*In*/
float Operate(float a,char b,float c)
{
float d=a;
int i,j;
if(b=='+') d=a+c;
else if(b=='-') d=a-c;
else if(b=='*') d=a*c;
else if(b=='^') /*乘方功能扩展*/
{for(i=1,j=(int)c;i<j;i++) a*=d;
d=a;
}
else d=a/c;
return d;
}/*Opreate*/
char Precede(char a,char b)
{
int i,j;
char Table[9][9]={' ','+','-','*','/','(',')','#','^',
'+','>','>','<','<','<','>','>','<',
'-','>','>','<','<','<','>','>','<',
'*','>','>','>','>','<','>','>','<',
'/','>','>','>','>','<','>','>','<',
'(','<','<','<','<','<','=',' ','<',
')','>','>','>','>',' ','>','>','>',
'#','<','<','<','<','<',' ','=','<',
'^','>','>','>','>','<','>','>','>',
};
for(i=0;i<9;i++)
if(Table[0][i]==b) /*锁定纵坐标*/
break;
for(j=0;j<9;j++) /*锁定横坐标*/
if(Table[j][0]==a)
break;
return Table[j][i];
}/*Precede*/

float ReadNum(char *s,int *j)
{
int i;
float num,weight=0.1; /*weight为小数位权*/
i=*j;
num=s[i]-'0';
for(;!In(s[i+1]);i++) num=10*num+s[i+1]-'0'; /*将整数部分字符串转化为实数*/
if(s[i+1]=='.') /*读到小数点*/
{ i++;
for(;!In(s[i+1]);i++) /*将表示小数部分的字符也转化过来,加到num中*/
{num=num+(s[i+1]-'0')*weight;
weight*=0.1;
}
}
*j=i; /*修改参与读取字符串的下标变量的内容*/
return num;
}

int Mainwork1(char *a,SqStack2 *OPTR,SqStack1 *OPND)
{
int i,*j,count=1;
float num,n,m;
char k;
j=&i;
clrscr();
if(a[0]=='\0')
{printf("\n\n\n\nInput a expression first!");
return 0;
}
InitStack2(OPTR);
Push2(OPTR,'#');
InitStack1(OPND);
printf("\n");
printf("Expression:");
for(i=0;a[i]!='#';i++)
{
if(In(a[i])||(a[i]>47&&a[i]<58)) printf("%c",a[i]);
else {
printf("\nERROR INPUTS!");
return 0;
}
}
i=0;
printf("\nSP");
gotoxy(5,count+2);
printf("OPTR");
gotoxy(15,count+2);
printf("OPND");
gotoxy(40,count+2);
printf("CGI");
gotoxy(50,count+2);
printf("Mainly operate\n");
Show1(OPND,OPTR,count);
while(a[i]!='#'||GetTop2(OPTR)!='#')
{
if(!In(a[i])) /* 是数字字符,调用转化函数转化后进操作字栈 */
{
num=ReadNum(a,j);
Push1(OPND,num);
gotoxy(40,count+3);
printf("%g",num);
gotoxy(50,count+3);
printf("PUSH(OPND,'%g')\n",num);
if(a[i]!='#') i++;
}
else
switch(Precede(GetTop2(OPTR),a[i]))
{
case'<': /* 栈顶元素优先级低,字符入栈 */
Push2(OPTR,a[i]);
gotoxy(40,count+3);
printf("%c",a[i]);
gotoxy(50,count+3);
printf("PUSH(OPTR,'%c')\n",a[i]);
if(a[i]!='#')i++;
break;
case'=': /* 栈顶元素优先级与读入字符相等 */
Pop2(OPTR); /* 出栈 */
gotoxy(40,count+2);
printf("%c",a[i]);
gotoxy(50,count+3);
printf("POP(OPTR)\n");
if(a[i]!='#')i++;
break; /* 栈顶元素优先级数高,出栈处理 */
case'>':
k=Pop2(OPTR);
m=Pop1(OPND);
n=Pop1(OPND);
if(k=='/'&&m==0)
{
printf("\n\nDenominator can't be zero,epression error!");
return 0;
}
Push1(OPND,Operate(n,k,m));
gotoxy(50,count+3);
printf("Operate('%g',%c,'%g')\n",n,k,m);
break;
}
count++;
Show1(OPND,OPTR,count);
}
gotoxy(50,count+3);
printf("Return GETTOP(OPND)");
m=Pop1(OPND);
printf("\nSo,the result is %g",m);
return m;
}

void About()
{
clrscr();
gotoxy(25,8);
printf("院校:安徽 \n\n\t\t\t");
printf("系别:计算机 \n\n\t\t\t");
printf("日期:2006-12-30");
}

下面的是在VC++里面的出错情况:

--------------------Configuration: 课程设计 - Win32 Debug--------------------
Compiling...
课程设计.cpp
E:\Visual C++\MSDev98\MyProjects\课程设计\课程设计.cpp(10) : fatal error C1083: Cannot open include file: 'mem.h': No such file or directory
Error executing cl.exe.

课程设计.obj - 1 error(s), 0 warning(s)

找了不知道哪的错误,还望有高人指点…………

搜索更多相关主题的帖子: include 源程序 字符串 color 网上 
2007-01-01 11:19
cmlove083
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-1
收藏
得分:0 
高手来帮个忙啊,
偶的课程设计报告还没写呢,
要是谁知道报告的格式或有报告的范本,就帮忙分享下啊,
偶的邮箱是:cm131432@sohu.com
谢谢各位啦!
2007-01-01 11:39
cmlove083
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-1
收藏
得分:0 
SOS
2007-01-01 11:42
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
一看到這么長的程序偶就直接轉到別的帖子裏叻````伱先大略確定下齣錯的位置吧```

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-01 22:22
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:0 
看下面的错误提示应该是没有mem.h头文件

2007-01-01 23:36
MQKt
Rank: 2
等 级:论坛游民
帖 子:235
专家分:20
注 册:2006-6-29
收藏
得分:0 
            应该是楼上说的mem.h没有或者是路径不对

2007-01-02 09:34
cz522321
Rank: 1
等 级:禁止访问
威 望:2
帖 子:569
专家分:5
注 册:2006-3-13
收藏
得分:0 
你的内存头文件的名字不对,应该为memory.h还有应该包含一个stdio.h,afx.h头文件,clrscr()这个函数的头文件也没有包含,strlen(p)&gt;count,这一句应该改为strlen(p)&gt;(UINT)count,还要包含cwindow.h,这样你试一下。

2007-01-02 10:29
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 

因为 #include 后面的包含的文件时,如果使用的是 "<>" 尖括号的话,
表示让编译器在系统头文件夹中查找对应名字的头文件,

当使用""""引号时,就是让编译器在当前程序目录下查找对应名字的头文件,如果没有找到,则编译器会再在系统头文件夹中查找该头文件.

所以,这里,你应该把
#include <mem.h>
改为
#include "mem.h"

还有,
你上面的程序的写法是不标准的,(但是能通过许多编译器)
应该这么写

#include <iostream> // 注意,标准中,系统头文件不推荐加 .h,类似地有 <cmath> 而不是 <math.h>
#include "class.h"
using namespace std; // 使用标准的名空间

int main(int argc, char *argv[]) // 标准 C++中 必须显式的申明 main 的返回值类型,不写的话有些编译器默认是 int 型
{
float l, w, h;
...
...
..
p[i].OutPut();
}

return 0; // 记得返回值
}


佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-02 10:35
快速回复:这个错误咋回事啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079584 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved