栈的初始化
主函数里面的stack初始化应该怎么写?(在42行)报错:取消对 NULL 指针“stack”的引用。 数据结构 D:\C语言程序设计与数据结构\数据结构\数据结构\S2E24.cpp 49
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define StackSize 100
typedef struct Node
{
int stacksize;
char* base;
char* top;
}node,*pnode;
void Push(pnode);
double Cale(pnode);
void Push(pnode stack)
{
char ch;
while ((ch = getchar()) != '\n')
{
*(stack->top) = ch;
stack->top++;
}
}
double Cale(pnode stack)
{
int n = 0;
double count = 0;
while (stack->base != stack->top)
{
count += pow(((double)*(stack->top)-'0'), n);
stack->top--;
n++;
}
return count;
}
int mian(void)
{
pnode stack=(pnode)malloc(sizeof(node));
double count;
stack->base = (char*)malloc(StackSize * sizeof(char));
if (stack->base)
{
exit(0);
}
stack->top = stack->base;
stack->stacksize = StackSize;
printf("请输入一个二进制数:");
Push(stack);
printf("正在计算...\n");
count = Cale(stack);
printf("转换为十进制为%lf\n", count);
return 0;
} 40 行的 main 写成了 mian 1. 这不是C语言么?.cpp 后缀是 C++,.c 后缀才是C语言
2. 二进制转十进制的算法不对
3. 循环结束条件不对
4. 使用了错误的栈顶元素
5. 申请了内存不释放
6. mian 可还行
7. 自己写代码不认真,别人也没办法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define StackSize 100
typedef struct Node
{
int stacksize;
char* base;
char* top;
}node, *pnode;
void Push(pnode);
double Cale(pnode);
void Push(pnode stack)
{
char ch;
while ((ch = getchar()) != '\n')
{
*(stack->top) = ch;
stack->top++;
}
}
double Cale(pnode stack)
{
int n = 0;
double count = 0;
--stack->top;
//while (stack->base != stack->top)
while (stack->base <= stack->top)
{
//count += pow(((double)*(stack->top)-'0'), n);
count += (*stack->top - '0') * pow(2, n);
stack->top--;
n++;
}
return count;
}
//int mian(void)
int main(void)
{
pnode stack=(pnode)malloc(sizeof(node));
double count;
stack->base = (char*)malloc(StackSize * sizeof(char));
//if (stack->base)
if (!stack->base)
{
free(stack);
exit(0);
}
stack->top = stack->base;
stack->stacksize = StackSize;
printf("请输入一个二进制数:");
Push(stack);
printf("正在计算...\n");
count = Cale(stack);
printf("转换为十进制为%lf\n", count);
free(stack->base);
free(stack);
return 0;
}
8. 判断是否成功申请内存写错了,而且一个判断一个不判断
写代码一定要认真
本帖最后由 焦糖橙子 于 2021-8-15 09:10 编辑
人造人 发表于 2021-8-14 20:32
1. 这不是C语言么?.cpp 后缀是 C++,.c 后缀才是C语言
2. 二进制转十进制的算法不对
3. 循环结束条件不 ...
那个46行stack如果是node类型,是不是就不用分配内存空间了?
会自动初始化吗?还是也要申请内存空间初始化
焦糖橙子 发表于 2021-8-15 09:03
那个46行stack可以不申请内存空间吗?
然后直接对stack->base申请内存空间
不申请内存怎么使用?
建议学一学汇编语言,你对内存的理解不够,在C语言指针这里的使用 不理解
页:
[1]