首页 > 解决方案 > 数组循环的错误逻辑在程序运行时给出双重(意外)结果

问题描述

所以我一直在研究我的代码。我有这些结构

typedef char infotype;
typedef int letak;

typedef struct {
  infotype info;
  letak parent, firstson, nextsibling;
} node;

typedef node tree;

我的意思是把“树”变成一个节点数组并分配它,所以我做了这些程序:

void createTree(tree T[])
{
  T[0].parent = 0;
  T[0].nextsibling = 0;
}

void createNode(tree T[], int k, int i, char value)
{
  if(i == 0)
  {
    T[i].info = value;
    T[i].firstson = i+1;
  }
  else
  {
    T[i].info = value;
    T[i].parent = (i-1) / k;
    T[i].firstson = (i * k) + 1;

    if (i % k == 0)
     {
        printf("Sorry but you cannot have any sibling!");
     }

    else
    {
        T[i].nextsibling = i+1;
    }
   }
  }

我的主要驱动力是:

#include <stdio.h>

int main()
{
  int maksimum;
  tree pohon[maksimum];
  int i = 0;
  char info;

  maksimum = 3;

  createTree(pohon);

  for (i = 0; i < 3; i++) //here things get weird
  {
    printf("Input the node name : ");
    scanf("%c", &info);
    createNode(pohon, 4, i, info);
  }

  return 0;
 }

当我运行我的程序时,它给了我:

输入节点名称:a

输入节点名称:输入节点名称:b

(“a”也是用户的输入),但我希望它是:

输入节点名称:a

输入节点名称:b

输入节点名称:c

谁能告诉我我哪里弄错了?

标签: carraysloops

解决方案


推荐阅读