改了很多遍使用文件的方式:“r,w,w+”,都无法让程序实现文件的输入输出,不然就是读取不了数据,该怎么改?
还有一个问题就是:如何实现同时显示三个测试案例?
比如这里选1再屏幕输入 T:7456189,接着选1,输出二叉排序树的高度,再进行下去实现其它功能只能再输入T;
每次想实现同一棵二叉排序树的功能都得输入一次该二叉排序树,且如果有多个测试案例,则要输入的次数太多,怎么去改善这个问题?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SaveFile(BSTree T) { //文件输出保存
FILE* fp;
if ((fp = fopen("test66-output.txt", "w+")) == NULL)
{
printf(" >>数据文件不能打开\n");
return;
}
//fprintf(fp, "%g", sum);
fprintf(fp,"%g",&T);//%g 自动选择合适的表示法
fclose(fp);
}
void Print(BSTree T) { //打印输出
int sel;
//double sum = 0.0;
printf("\t\t\t\t\t\t>>#1二叉排序树的高度<<\n");
printf("\t\t\t\t\t\t>>#2除嵌套括号方式显示二叉排序树以外,增加倒立的树的形式显示<<\n");
printf("\t\t\t\t\t\t>>#3用递归和非递归实现二叉排序树的查找并给出查找路径<<\n");
printf("\t\t\t\t\t\t>>#4分别给出测试案例查找成功(如有)和查找失败(如有)次数<<\n");
// printf("\t\t\t\t\t\t>>#5在等概率的情况下,给出ASL成功(如有)和ASL不成功(如有)的公式和结果<<\n");
scanf("%d", &sel);
switch (sel) {
case 1:
int h;
h=height(T);
printf("\n该二叉排序树的高度为:%d\n",h);
break;
case 2:
printf("\n二叉树的的嵌套括号表示:");
Show(T);
printf("\n");
break;
case 3:
printf("\n请输入要查找的元素:");
int k;
scanf("%d",&k);
//ScreenInput();
printf("\n递归或非递归实现二叉排序树的查找并给出查找路径:");
SearchBST(T, k);
printf("\n");
break;
case 4:
printf("\n分别给出测试案例查找成功(如有)和查找失败(如有)次数:\n");
int sumlen=0,m=0;
prSucclength(T);
prUnsucclength(T);
printf("\n在等概率的情况下,给出ASL成功(如有)和ASL不成功(如有)的公式和结果:\n");
printf("ASL成功=%g\n",ASLsucc(T)); //ASL = 1/6 * (1+2+2+3+3+3) = 14/6
printf("ASL不成功=%g\n",ASLunsucc(T));
break;
printf("\n");
SaveFile(T);
}
}
void ScreenInput() { //屏幕输入
BSTree T;
printf("T:");CreateBST(&T);//scanf("%d",T);
//Print(x, n);
//Print(T,k);
// int k;
//printf("k:"); scanf("%d", k);
Print(T);
}
void FileOpen() { //文件输入
FILE* fp = NULL;
//double x;
BSTree T;
int sel;
printf("\t\t\t\t\t\t>>请选择文件1~3:<<\n");
scanf("%d", &sel);
switch (sel) {
case 1:
fp = fopen("test66-input1.txt", "r");//r
break;
case 2:
fp = fopen("test66-input2.txt", "r");//r
break;
case 3:
fp = fopen("test66-input3.txt", "r");//r
break;
}
if (fp == NULL) {
printf("文件不存在\n");
exit(0);
}
else {
fscanf(fp, "%g", &T);
//fscanf(fp, "%g", k);
Print(T);
}
fclose(fp);
}
int main()
{
BSTree T;
//int k;
BSTree result;
int sel = 1;
system("Color F0");//改变DOS窗口颜色
while (sel) {
printf("\t\t\t\t\t\t>>#1屏幕输入<<\n");
printf("\t\t\t\t\t\t>>#2文件输入<<\n");
printf("\t\t\t\t\t\t>>#0退出<<\n");
printf("请选择输入方式:\n");
scanf("%d", &sel);
switch (sel) {
case 1:
printf("--------->当前为屏幕输入\n");
ScreenInput();
break;
case 2:
printf("--------->当前为文件输入\n");
FileOpen();
break;
}
}
return 1;
}