c - 数组循环的错误逻辑在程序运行时给出双重(意外)结果
问题描述
所以我一直在研究我的代码。我有这些结构
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
谁能告诉我我哪里弄错了?
解决方案
推荐阅读
- swift - viewDidLoad() 和全局变量
- postgresql - PostgreSQL 在单个查询中随时间滚动标准偏差
- java - android.media.AudioRecord - 无效的音频缓冲区大小
- c# - 花括号减少新行的比例
- database - 类型不匹配,预期:DBIOAction[NotInferedR, NoStream, Nothing],实际:Future[PortalPostgresProfile.ProfileAction[Int, NoStream, Effect.Write]]
- excel - 如何从字符串中获取值
- python - 如何在分类问题的熊猫数据框中将分类数据与压缩稀疏行矩阵混合
- swift - 在继续下一个请求或调度队列中的下一个 DispatchWorkItem 之前,我如何等待接收来自 DispatchWorkItem 的响应
- pyspark - Databricks 如何为集群做自动伸缩
- concurrency - AWS Athena 并发限制:提交的查询数 VS 正在运行的查询数