在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 x
和float probability
更新: OP将第一个scanf中的“%d”更改为“%c”,这样我认为错误会在以后发生; 但坦率地说,我不觉得再投资了.–
原始答案:输入永远不会超出’a’,因为您尝试使用转换规范%d读取它不满足的整数。 (为了读取char,你将指定%c。)Scanf将有问题的字符放回输入中,并尝试读取下一个再次失败的数字,依此类推。
值得检查scanf的返回值,此值始终为0,表示没有成功转换。