| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2247 人关注过本帖
标题:如何将一个已经使用过的字符数组S重新置空到刚定义时的状态?
取消只看楼主 加入收藏
桀骜不驯
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-13
收藏
 问题点数:0 回复次数:2 
如何将一个已经使用过的字符数组S重新置空到刚定义时的状态?
我试过 s[0]='\0';
好象不行呀
搜索更多相关主题的帖子: 定义 字符 状态 
2006-03-15 14:05
桀骜不驯
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-13
收藏
得分:0 
楼上的好象不行噎,调试通不过

2006-03-15 14:18
桀骜不驯
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-3-13
收藏
得分:0 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NULL 0
#define ERROR -1
#define STACKSIZE 20


typedef struct
{
char stackname[20];
char *base;
char *top;
} Stack;


Stack OPTR, OPND;
char expr[255] = "";
char *ptr = expr;
int step = 0;

int InitStack(Stack *s, char *name)
{
s->base=(char *)malloc(STACKSIZE*sizeof(char));
if(!s->base) exit (ERROR);
strcpy(s->stackname, name);
s->top=s->base;
return 1;
}

int In(char ch)
{
return(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='#');
}

void OutputStatus(void)
{
char *s;


printf("\n%-8d", ++step);


for(s = OPTR.base; s < OPTR.top; s++)
printf("%c", *s);
printf("\t");

for(s = OPND.base; s < OPND.top; s++)
printf("%d ", *s);

printf("\t\t%c", *ptr);
}

int Push(Stack *s,char ch)
{

char *name = s->stackname;
OutputStatus();
if(strcmp(name, "OPND") == 0)
printf("\tPUSH(%s, %d)", name, ch);
else
printf("\tPUSH(%s, %c)", name, ch);

*s->top=ch;
s->top++;
return 0;
}

char Pop(Stack *s)
{
char p;

OutputStatus();
printf("\tPOP(%s)", s->stackname);

s->top--;
p=*s->top;
return (p);
}

char GetTop(Stack s)
{
char p=*(s.top-1);
return (p);
}


char Precede(char c1,char c2)
{
int i=0,j=0;
static char array[49]={ '>', '>', '<', '<', '<', '>', '>',
'>', '>', '<', '<', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'<', '<', '<', '<', '<', '=', '!',
'>', '>', '>', '>', '!', '>', '>',
'<', '<', '<', '<', '<', '!', '='};

switch(c1)
{

case '+' : i=0;break;
case '-' : i=1;break;
case '*' : i=2;break;
case '/' : i=3;break;
case '(' : i=4;break;
case ')' : i=5;break;
case '#' : i=6;break;
}
switch(c2)
{

case '+' : j=0;break;
case '-' : j=1;break;
case '*' : j=2;break;
case '/' : j=3;break;
case '(' : j=4;break;
case ')' : j=5;break;
case '#' : j=6;break;
}
return (array[7*i+j]);
}


Operate(int a,char op,int b)
{

OutputStatus();
printf("\tOPERATE(%d, %c, %d)", a, op, b);


switch(op)
{
case '+' : return (a+b);
case '-' : return (a-b);
case '*' : return (a*b);
case '/' : return (a/b);
}
return 0;
}

int EvalExpr(void)
{
char c,theta,x,m;
int a,b;
c = *ptr++;
while(c!='#'||GetTop(OPTR)!='#')
if(!In(c))
{
m=atoi(&c);
Push(&OPND,m);
c = *ptr++;
}
else
switch(Precede(GetTop(OPTR),c))
{
case '<':
Push(&OPTR,c);
c = *ptr++;
break;
case '=':
x=Pop(&OPTR);
c = *ptr++;
break;
case '>':
theta=Pop(&OPTR);
b=Pop(&OPND); a=Pop(&OPND);
Push(&OPND,Operate(a,theta,b));
break;
}

return GetTop(OPND);
}

int func()
{
printf(" 请输入算式:\n");

char line[100];
scanf("%s",line);
int i;
for(i=0;line[i]!='\0';i++)
{
}
line[i]='#';
i++;
line[i]='\0';

strcpy(expr, line);
InitStack(&OPTR, "OPTR");
Push(&OPTR,'#');
InitStack(&OPND, "OPND");
printf("\n\nresult:%d\n", EvalExpr());

return 0;
}

int menu()
{
int o;
printf(" 任意键执行程序,退出请按0\n");
scanf("%d",&o);
return(o);
}

void main()
{
func();
int i;
i=menu();
if(i==0)
{
exit(1);
}
func();
}




程序执行第二遍时,就会有问题,显示不停刷屏,我估计的因为func 函数中的line字符串没有置空的原因


2006-03-15 14:34
快速回复:如何将一个已经使用过的字符数组S重新置空到刚定义时的状态?
数据加载中...
 
   



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

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