回 帖 发 新 帖 刷新版面

主题:高手请帮忙改下程序!!~~~初学者的问题

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW -1
#define ERROR 0
typedef int Status;


typedef int SElemType;
typedef struct{   
   SElemType *base;  
   SElemType *top;   
   int stacksize;  
}SqStack;



typedef int ElemType;
Status InitStack(SqStack &s) 
{   s.base=( SElemType *)malloc
  (STACK_INIT_SIZE * sizeof(SElemType));
  if(!s.base) return(OVERFLOW);   
  s.top = s.base;   
  s.stacksize = STACK_INIT_SIZE;   
  return OK;


Status  Push(SqStack &s, SElemType e)
{SElemType *l_temp;
    if (s.top - s.base >= s.stacksize)
  { s.base=(SElemType*)realloc
      (s.base,(s.stacksize+STACKINCREMENT)
                          *sizeof(SElemType));
      if (!s.base) return(OVERFLOW);
      s.top = s.base + s.stacksize;
      s.stacksize += STACKINCREMENT;
  }
  *(s.top++) = e;   return OK;


Status  Pop(SqStack &s, SElemType &e)
{  if (s.top == s.base)return ERROR;
   e = *(--s.top);
    return OK;

int StackEmpty(SqStack s)
{
    if(s.base == s.top) return OK;
    else return ERROR;
}
void conversion(int N,int b)
{
    SqStack s;
    SElemType e;
    InitStack(s);
    while(b>=2 && N>0){
      Push(s, N%b);
      N =N/b;
    }
    while(!StackEmpty(s)){
      Pop(s, e);
      printf("%d ",e);
    }

void main()
{ int N,b;
  printf("N=");
  scanf("%d",&N);
  printf("b=");
  scanf("%d",&b);
  conversion(N,b);
}


请帮改一下:程序的功能是将十进制数N转换成b进制数,如果N,b输入的是数字,则程序
正常运行;如果输入的是字符则显示输入有错提示,谢谢高人指点!!



回复列表 (共5个回复)

沙发

当然啦,就是输入有错误啊,整数类型不接受字符输入

板凳

不好意思,没说清楚,如果输入的是字符,如A,B,\,+  运行时不是直接就退出,而是输出"输入数据错误"的提示....输入的是数字,则运行得结果...
偶就是不会怎么判断输入的是字符还是数字,如果用isdigit()之类的函数来判断好似只能判断一个字符,如果输入的是一串字符呢?
希望高人直接帮我做出来,偶也好有个学习的范例 ^ ^

3 楼

不需要这么多的预处理吧?看的时候很容易出错的。

4 楼

可以用栈来处理啊!
下面是我编的程序,你看看吧!
#define TRUE 1
#define FALES 0
#define OK 1
#define ERROR 0
#define OVERFLLOW 0
#define INFEASIBLE -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define MAXSTRLEN 255
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int status;
typedef int ELEMTYPE;
typedef struct{
           ELEMTYPE *base;
           ELEMTYPE *top;
           int stacksize;
          }sqstack;

status initstack(sqstack *s)
{s->base=(ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE));
 if(!s->base)exit(OVERFLLOW);
 s->top=s->base;
 s->stacksize=STACK_INIT_SIZE;
 return(OK);
}

status gettop(sqstack *s,ELEMTYPE *e)
{if(s->top==s->base)return(ERROR);
 else {
       *e=*(s->top-1);
       return(OK);
      }
}

status push(sqstack *s,ELEMTYPE e)
{while(s->top-s->base>=s->stacksize)
    {s->base=(ELEMTYPE*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ELEMTYPE));
     if(!s->base)exit(OVERFLLOW);
     s->top=s->base+s->stacksize;
     s->stacksize+=STACKINCREMENT;
    }
 *s->top++=e;
 return(OK);
}

status pop(sqstack *s,ELEMTYPE *e)
{if(s->top==s->base)return(ERROR);
  else {
    *e=*--s->top;
    return(OK);
       }
}

status stackempty(sqstack *s)
{if(s->top==s->base)return(OK);
  else return(ERROR);
}

void conversion(int a)
{int m;
 ELEMTYPE e;
 sqstack s;
 printf("please input which bit you want(1~16): ");
 scanf("%d",&m);
 while(m<=0||m>16)
   {printf("please input again\n");
    scanf("%d",&m);
   }
 initstack(&s);
 while(a)
      {push(&s,a%m);
       a=a/m;
      }
 printf("the result is: ");
 while(!stackempty(&s))
      {pop(&s,&e);
       printf("%d",e);
      }
}

void main()
{int a;
 clrscr();
 printf("please input a num:\n");
 scanf("%d",&a);
 conversion(a);
 printf("\n");
 getch();
}

5 楼

请问一下 4楼的兄弟, 
在你的程序中 
typedef int status;
typedef int ELEMTYPE;
这两个类型定义不用说明吗?  不说明的话在栈定义中ELEMTYPE *base;
           ELEMTYPE *top;
怎么实现啊?

我来回复

您尚未登录,请登录后再回复。点此登录或注册