鱼C论坛

 找回密码
 立即注册
查看: 2987|回复: 5

哪里有问题呀?看了好多好多遍。没发现错误

[复制链接]
发表于 2022-12-18 21:32:07 | 显示全部楼层 |阅读模式
20鱼币
PWZCX9QB$MN%T5BJM`K0KM5.png
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define STACK_INIT_SIZE 20
  4. #define STACKINCREMENT 10

  5. typedef char ElemType;
  6. typedef struct{
  7.         ElemType *base;
  8.         ElemType *top;
  9.         int size;
  10. }sqStack;

  11. int wd_pow(int i, int j){
  12.         int a, num = 1;

  13.         for (a = 0; a < j; a++){
  14.                 num *= i;
  15.         }

  16.         return num;
  17. }

  18. void InitStack(sqStack *s){//初始化
  19.         s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
  20.         if (!s->base ){
  21.                 exit (0);
  22.         }
  23.         s->top = s->base;
  24.         s->size = STACK_INIT_SIZE;
  25. }

  26. void push(sqStack *s, ElemType e){//入栈
  27.         if (s->top - s->base >= s->size){
  28.                 s->base = (ElemType *)realloc(s->base, (s->size + STACKINCREMENT) * sizeof(ElemType));
  29.                 if (!s->base ){
  30.                         exit (0);
  31.                 }
  32.                 s->top = s->base + s->size;
  33.                 s->size = s->size + STACKINCREMENT;
  34.         }

  35.         *(s->top) = e;
  36.         s->top++;
  37. }

  38. void pop(sqStack *s, ElemType *e){//弹栈
  39.         if (s->top == s->base){
  40.                 return;
  41.         }
  42.         *e = *--(s->top);
  43. }

  44. int StackLen(sqStack s){//求栈当前容量
  45.         return (s.top - s.base);
  46. }

  47. int main(){
  48.         ElemType c;
  49.         sqStack s1, s2;
  50.         int len, i, j, sum = 0;

  51.         InitStack (&s1);//初始化栈s1,用来存放二进制输入

  52.         printf("请输入二进制数,输入#表示结束! \n");
  53.         scanf("%c", &c);
  54.         while(c != '#'){
  55.                 if (c == '0' || c == '1' )//检查输入是否二进制
  56.                         push(&s1, c);
  57.                 scanf("%c", &c);
  58.         }

  59.         getchar ();//把\n从缓冲区去掉
  60.         len = StackLen(s1);

  61.         InitStack(&s2); // 初始化栈s2,用来存放转换的八进制
  62.         printf("栈的当前容量是:%d\n", len);
  63.         for(i = 0; i < len; ){
  64.                 for(j = 0; j < 3; j++, i++){
  65.                         pop(&s1, &c);
  66.                         sum = sum + (c-48) * wd_pow(2, j);
  67.                         if (s1.base == s1.top){
  68.                                 break;
  69.                         }
  70.                 }
  71.                 push(&s2, sum+48);
  72.                 sum =0;
  73.         }
  74.        
  75.         printf("转换为八进制是:");
  76.         while (s2.base != s2.top){
  77.                 pop(&s2, &c);
  78.                 putchar(c);
  79.         }
  80.         putchar('\n');

  81.         return 0;
  82. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-19 14:02:25 | 显示全部楼层
成功了
  1. void push(sqStack *s, ElemTyppe e){//入栈
  2.         if (s->top - s->base >= s->size){
  3.                 s->base = (ElemTyppe *)realloc(s->base, (s->size + STACK_INIT_SIZE) * sizeof(ElemTyppe));
  4.                 if (!s->base ){
  5.                         exit (0);
  6.                 }
  7.                 s->top = s->base + s->size;
  8.                 s->size = s->size + STACKINCREMENT;
  9.         }

  10.         *(s->top) = e;
  11.         s->top++;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-19 11:48:13 | 显示全部楼层
78行for语句里面 i 没有++
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-19 12:58:19 | 显示全部楼层
焦糖橙子 发表于 2022-12-19 11:48
78行for语句里面 i 没有++

在79行里呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-21 14:20:14 | 显示全部楼层

你用 VS编译器,我看了一下,好像是编译器问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-24 11:28:56 | 显示全部楼层
编程追风梦 发表于 2022-12-21 14:20
你用 VS编译器,我看了一下,好像是编译器问题

已经没问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表