在for循环中跳过scanf()

在Windows中,我使用flushall()函数来刷新所有缓冲区但这在Linux中不起作用,我的scanf()函数跳过而不扫描:

for(i=0;ileft=p->right=NULL; p->data=x; p->freq=(float)probability; head=insert(head,p); } 

输出:

 mayur@mayur-laptop:~$ ./a.out Enter alphabet :a Enter frequency :2 Enter alphabet : Enter frequency :a Enter alphabet : Enter frequency :2 Enter alphabet : Enter frequency :a Enter alphabet : 

您应该在scanf的开头添加一个空格,并在每个scanf之前添加fflush(stdin)以清除标准输入缓冲区(默认情况下为键盘),如下所示:

 for(i=0;ileft=p->right=NULL; p->data=x; p->freq=(float)probability; head=insert(head,p); } 

编辑:检查您是否有char xfloat probability

更新: OP将第一个scanf中的“%d”更改为“%c”,这样我认为错误会在以后发生; 但坦率地说,我不觉得再投资了.–

原始答案:输入永远不会超出’a’,因为您尝试使用转换规范%d读取它不满足的整数。 (为了读取char,你将指定%c。)Scanf将有问题的字符放回输入中,并尝试读取下一个再次失败的数字,依此类推。

值得检查scanf的返回值,此值始终为0,表示没有成功转换。