十进制转化成二进制

yingzijuntuan 2011-11-17 11:55:14
书上有一个十进制转化成二进制的程序,我编译了一下,但是运行不了,总是有错误的。。。。求大虾帮忙找一下错误,一定要在我的程序上面找出错误出来呀。。。。然后告诉我怎么改。最好要经过运行发现没有问题后再告诉我哟!我的程序如下

#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
#define OVERLOW -2
#define ok 1
#define error -1
typedef struct sqstack
{
int *base;
int *top;
int max;
}sqstack;
void Initstack(sqstack &s)
{
//构造一个空栈s
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) exit(OVERLOW);//存储分配失败
s.top=s.base;
s.max=STACKINCREMENT;
}
int stackempty(sqstack &s)
{
if(s.base==s.top) return 1;
return 0;
}
int push(sqstack &s,int e)
{
if(s.top-s.base>=s.max)
{
//栈满,追加存储空间
s.base=(int *)realloc(s.base,(s.max+STACKINCREMENT)*sizeof(int));
if(!s.base) exit(OVERLOW);//存储分配失败
s.top=s.base+s.max;
s.max+=STACKINCREMENT;
}
*s.top++=e;
return ok;
}
int pop(sqstack & s,int *e)
{
//若栈不空,删除s的栈顶元素,用e返回其值,并返回ok,否则饭后error
if(s.top==s.base) return error;
*e=*--s.top;
return ok;
}
void convert(sqstack s)
{
//对于输入的任意一个非负十进制整数,打印输出等值的二进制数
Initstack(s);
int n,e;
printf("请输入一个非负十进制整数\n");
scanf("%d",n);
while(n)
{
push(s,n%2);
n=n/2;
}
while(!stackempty(s))
{
pop(s,&e);
printf("%d",e);
}
}
void main()
{
sqstack s;
convert(s);
}
...全文
402 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
backbin 2011-11-17
  • 打赏
  • 举报
回复
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
后面没有分号
scanf( "%d",&n); 记得要用&取地址符号
if(s.top-s.base> =s.max)
改为if(s.top-s.base >= s.max)
OK没问题啦,我运行好啦!!!!
yingzijuntuan 2011-11-17
  • 打赏
  • 举报
回复
好吧,根据大家的回答,我把程序改好了,真是太感谢了。但是我还有一个问题,就是,当我在宏定义后面加了分后后会出现错误,那个错误是这样的
c:\program files\microsoft visual studio\myprojects\df\drthr.cpp(17) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\myprojects\df\drthr.cpp(17) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\myprojects\df\drthr.cpp(17) : error C2100: illegal indirection
c:\program files\microsoft visual studio\myprojects\df\drthr.cpp(32) : error C2143: syntax error : missing ')' before ';'
c:\program files\microsoft visual studio\myprojects\df\drthr.cpp(32) : error C2143: syntax error : missing ')' before ';'
就是说我的malloc那块出现了问题,希望那个大虾在宏定义后面加一个分号看看那个错误的问题,求教求教呀。。。。。为什么?其实我自己也看了好久的那个程序,就是因为我自己看出现的错误没有看懂呀!还有一个问题,我在发帖的时候程序是缩进的,但是发上去之后程序就变成都是向左靠齐了,怎么能把程序发上去后还是缩进的呀?
lancerEx 2011-11-17
  • 打赏
  • 举报
回复
初学者遇到这样的问题 应该边看书边调试 花个3-4个小时也值得
等到你检查出错误来了 会发现收获很多 编程能力也上升了一个层次
csuyuanweiqingking 2011-11-17
  • 打赏
  • 举报
回复
lz的程序是凌乱的。
cfvmario 2011-11-17
  • 打赏
  • 举报
回复
怎么搞这么复杂的程序。。没必要啊 写代码别故意往复杂了写啊
0xAC 2011-11-17
  • 打赏
  • 举报
回复
1、宏定义不要分号
2、scanf没有取址符
wzhwisk 2011-11-17
  • 打赏
  • 举报
回复
1.宏定义不是语句,不要分号。
2.scanf函数没有&。
3.如果是书上的小练习,十进制数转化成二进制,没必要用栈做吧?数组足矣。
dinghing 2011-11-17
  • 打赏
  • 举报
回复
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
去掉分号,宏定义不需要分号
goldbeef 2011-11-17
  • 打赏
  • 举报
回复
#include   <stdio.h> 
#include <malloc.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100 // 木有封号
#define STACKINCREMENT 10//
#define OVERLOW -2
#define ok 1
#define error -1

struct sqstack
{
int *base;
int *top;
int max;
};

void Initstack(sqstack &s)
{
//构造一个空栈s
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) exit(OVERLOW);//存储分配失败
s.top=s.base;
s.max=STACKINCREMENT;
}

int stackempty(sqstack &s)
{
if(s.base==s.top) return 1;
return 0;
}

void push(sqstack &s,int e)
{
if(s.top-s.base==s.max)
{
//栈满,追加存储空间
s.base=(int *)realloc(s.base,(s.max+STACKINCREMENT)*sizeof(int));
if(!s.base) exit(OVERLOW);//存储分配失败
s.top=s.base+s.max;
s.max+=STACKINCREMENT;
}
*s.top=e;
s.top++;
}

int pop(sqstack & s,int *e)
{
//若栈不空,删除s的栈顶元素,用e返回其值,并返回ok,否则饭后error
if(s.top==s.base) return error;
s.top--;
*e=*s.top;
return ok;
}

void convert(sqstack &s)
{
//对于输入的任意一个非负十进制整数,打印输出等值的二进制数
Initstack(s);
int n,e;
printf( "请输入一个非负十进制整数\n");
scanf( "%d",&n);
while(n)
{
push(s,n%2);
n=n/2;
}
while(!stackempty(s))
{
pop(s,&e);
printf( "%d",e);
}
printf("\n");
}

void main()
{
sqstack s;
convert(s);
}
hulongchuan 2011-11-17
  • 打赏
  • 举报
回复
显然lz是新手!
gaochizhen33 2011-11-17
  • 打赏
  • 举报
回复
我靠 楼主你这写的也太不规范了
自信男孩 2011-11-17
  • 打赏
  • 举报
回复
还有这个:scanf( "%d ",n); 应该是scanf("%d", &n);吧。
赵4老师 2011-11-17
  • 打赏
  • 举报
回复
long i;
char b[33];
char bin[33];
i=12345L;
sprintf(bin,"%032s",_ltoa(i,b,2));
printf("%s\n",bin);

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧