dyj6pdehen 2022-11-29 19:40 采纳率: 78.9%
浏览 7
已结题

输入与实际不符,将|\n录入了数组第一位


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef char DataType;
typedef struct
{
    DataType data[MaxSize];
    int biTreeNum;
} SeqBiTree;
SeqBiTree *CreateBiTree(SeqBiTree *tree,int n)
{
    tree->biTreeNum = n;
    if (n == 0) return NULL;
    int i = 1;
    int p = i;
    while (i <= n)
    {
        scanf_s("%c", &(tree->data[p - 1]));
        if (tree->data[p - 1] != '#')
        {
            i++;
            p++;
        }
        else
            p++;
    }
    return tree;
}
void PrePrint(DataType Seq[],int num)
{
    if (Seq[num - 1] != '#')
        printf("%c ", Seq[num - 1]);
    else return;
    PrePrint(&(Seq[2*num-1]),2*num);
    PrePrint(&(Seq[2*num+1-1]),2*num+1);
}
void PreOrder(SeqBiTree* tree)
{
    if (tree->biTreeNum == 0)
    {
        printf("二叉树为空,先序遍历结束\n");
        return;
    }
    int i = 1;
    PrePrint(&(tree->data[i-1]),i);
    printf("\n");
}
void InPrint(DataType Seq[], int num)
{
    if (Seq[2*num - 1] != '#')
        printf("%c ", Seq[2*num - 1]);
    else return;
    InPrint(&(Seq[num-1]),num);
    InPrint(&(Seq[2*num+1-1]), 2*num+1);
}
void InOrder(SeqBiTree* tree)
{
    if (tree->biTreeNum == 0)
    {
        printf("二叉树为空,中序遍历结束\n");
        return;
    }
    int i = 1;
    InPrint(&(tree->data[i-1]), i);
    printf("\n");
}
void PostPrint(DataType Seq[], int num)
{
    if (Seq[2 * num - 1] != '#')
        printf("%c ", Seq[2 * num - 1]);
    else return;
    PostPrint(&(Seq[2 * num + 1 - 1]), 2 * num + 1);
    PostPrint(&(Seq[num - 1]), num);
}
void PostOrder(SeqBiTree* tree)
{
    if (tree->biTreeNum == 0)
    {
        printf("二叉树为空,后序遍历结束\n");
        return;
    }
    int i = 1;
    PostPrint(&(tree->data[i - 1]), i);
    printf("\n");
}
void LevelOrder(SeqBiTree* tree)
{
    if (tree->biTreeNum == 0) { printf("层序遍历为空,返回\n"); return; }
    int i = 1;
    int p = i;
    while (i <= tree->biTreeNum)
    {
        if (tree->data[p - 1] != '#')

        {
            printf("%c ", tree->data[p - 1]);
            i++; p++;
        }
        else p++;
    }
    printf("\n");
}
int main()
{
    int NUM;
    printf("输入将要创建的二叉树的结点数:\n");
    scanf_s("%d", &NUM);
    printf("按照层序遍历的顺序建立结点数为%d的二叉树\n",NUM);
    SeqBiTree* T = (SeqBiTree*)malloc(sizeof(SeqBiTree));
    T = CreateBiTree(T, NUM);
    printf("先序遍历创建的二叉树\n");
    PreOrder(T);
    printf("中序遍历创建的二叉树\n");
    InOrder(T);
    printf("后序遍历创建的二叉树\n");
    PostOrder(T);
    printf("层序遍历建立的二叉树\n");
    LevelOrder(T);
    printf("\n");
    printf("若创建一个空的二叉树并依次进行遍历结果如下:\n");
    SeqBiTree* N = (SeqBiTree*)malloc(sizeof(SeqBiTree));
    N = CreateBiTree(N, 0);
    PreOrder(N);
    InOrder(N);
    PostOrder(N);
    LevelOrder(N);


    return 0;
}

问题出在创建二叉树函数里,输入见下:

img


但是发现了问题,见下:

img


希望能得到解决。谢谢

  • 写回答

1条回答 默认 最新

  • 时语-shine 2022-11-29 19:44
    关注

    你输入4的时候,还按了个回车,4被读取,回车,也是换行'\n'还残留在缓冲区。scanf %c 的时候就会把'\n'读取了。所以在之前要清一下缓冲区,不是很复杂的话用一次getchar()或者scanf %c应该就行了,把换行符吞掉

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀