2 wy1018507358 wy1018507358 于 2013.08.11 13:04 提问

关于scanf指令跳过执行的问题。单步调试时正确的 。纠结好长时间

运行前两步是正确的,第三步就不正确了我用的是vi 编辑器 调试gdb
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int TElemType;
typedef int Status;
`
typedef struct BiTNode
{
TElemType data;

struct BiTNode lchild,*rchild;
}BiTNode,*BiTree;
int i=0;//用来测试递归的层
Status CreateBiTree(BiTree *T)

{
i++;
printf("The%d level\n", i);

char ch;
scanf("%c",&ch);

setbuf(stdin,NULL);//用来清空输入缓存的数据

if(ch==' ')
(*T)=NULL;
else
{
if(!(*T=(BiTNode
)malloc(sizeof(BiTNode))))
exit(0);
(*T)->data=ch;

CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
}
void main()
{
BiTree root;
CreateBiTree(&root);
printf("success");

}
`

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
scanf()函数被跳过不运行的原因
       当你进行过了scanf函数后, 在第二次scanf函数时, 由于缓存区里依然存着第一次结束时送入的回车符,在第二次时没有读入就直接把回车符送入了,所以没有真正起到读入数据的作用.只要在合适的地方加入fflush(stdin)清空缓存区,再运行scanf时就可以了.#include#include #includechar judge(int try,int answer){
C语言中scanf被跳过-求大神解决
这段程序在vc++6.0中编译组建都没有问题,可是运行后发现里面有一段代码被跳过了,如何解决? # include int main(void) { double number1, number2; char operation; char answer; start: printf("\nEnter the calculation\n"); scanf("%lf %c
scanf问题:先用一个scanf读入一个数后,再用一个scanf读入一个字符时,不等输入直接跳过!
scanf问题:先用一个scanf读入一个数后,在用一个scanf读入一个字符时,不等输入直接跳过! 控制串中的空白符使 scanf() 在输入流中跳过一个或多个空白行。空白符可以是空格(space)、制表符(tab)和新行符(newline)。 本质上,控制串中的空白符使 scanf() 在输入流中读,但不保存结果,直到发现非空白字符为止。 非空白符使 scanf() 在流中读一个匹配的字符并忽略之。例如,"%d,%d" 使 scanf() 先读入一个整数,读入中放弃逗号,然后读另一个整数。如未发现匹配
stm32单步调试正确,全速运行错误
模拟i2c的时候出现的问题。 单步走延时较大(全速跑只有程序设置的时延),导致程序全速运行无输出。 加大时延即可。
详解调试概念:单步执行、单步进入、强制进入、单步退出
关于JS、Java的调试,有下面几个概念。基本上所有的调试工具都支持,下面是四个概念的解释   单步执行:Step Over          就是一行一行的执行代码,但不一定会进入到所调用的代码里面,比如说,new了一个对象,但不一定会进入该对象构造方法里面。   单步进入:Step Into          就是调用了一个时,单步进入会进入到该方法里面,除
4断点和单步执行
4.12在调试器中设置断点 当我们在调试器中设置断点,调试器会先把这里的本来指令的第一个字节保存起来,然后写入int3指令, 4.13断点命中 对于window这种保护模式下的多任务操作系统,INT3异常的处理函数是操作系统的内核函数(KiTrap03),因此执行INT3会导致CPU执行nt!kitrap03函数,KiTrap03对X86 CPU的断点异常会有一个特殊的处理,会将程序
OllyDbg完全教程 单步执行与自动执行[Step-by-step execution and animation] Hit跟踪[Hit trace]
二十,单步执行与自动执行[Step-by-step execution and animation] 您可以通过按 F7(单步步入)或 F8(单步步过),对程序进行单步调试。这两个单步执行操作的主要区别在于:如果当前的命令是一个子函数,按F7,将会进入子函数,并停在子函数的第一条命令上;而按 F8,将会一次运行完这个子函数。如果您单步步过的子函数中含有断点或其他调试事件,执行将会被暂停,但
单步跳入 单步跳过 单步返回
单步跳入:step into调试,进入语句中的子函数进行步进调试 单步跳过:step over调试,跳过该行语句,进入下一行进行调试 单步返回:step out调试,跳出当前函数,进入调用源进行调试 例如: 1. if(aa=fun(xx,xx)) ←当前断点位置 { aa=b; } 当执行单步跳入后,进入fun()函数的第一句语句,继续调试 2. aa=fun();
vc++6.0的scanf问题
今天用vc++做文件的写入和读取练习时,程序为 struct stu { char name[15]; char num[6]; float score[2]; }student; int main(void) { FILE* fp; int i; if(NULL == (fp = fopen("./1.txt", "wb"))) { printf("File 1.txt
一点对C语言中跳过scanf语句的理解
scanf语句是从缓冲区中读取数据,如果发现自己的scanf被莫名的跳过,那肯定是缓冲区里含有其他的数据咯,可以用getchar()语句把缓冲区的数据舍弃掉,当然这只是一般的情况,今天本人就碰见了个复杂点的,在调用了一个函数后缓冲区没有被清空,在发生这种情况后,思考方向一定是上一个scanf语句,