问题:
请大佬救救孩子!
不加fflush(stdin):运行时没有让输入(程序中是有scanf函数的)
加上以后,运行就正常了:
以下是我原来的代码:
include "stdio.h"
main ()
{
int a[15]={1,3,6,7,9,13,56,57,74,81,90,91,94,100,102};
int min = 0, middle = 7, max = 14, i, number, n = 0;
char c = 'y';
while(c == 'y')
{
printf("请输入要查找的数:");
scanf("%d", &number);
if(number < a[0] || number > a[14])
printf("不在表中\n");
else
for(i = 0; i < 4; i++)
{
if(number == a[middle])
{
printf("%d是数组中第%d个元素的值\n", number, middle+1);
n++;
break;
}
else if(number < a[middle])
{
max = middle - 1;
middle = (min + max) / 2;
}
else
{
min = middle + 1;
middle = (min + max) / 2;
}
}
if(n == 0)
printf("不在表中\n");
printf("是否要继续查找?y or n?");
scanf("%c",&c);
}
}
回答1:
使用scanf接受输入时,你最后输入的回车也会作为输入字符记录在缓冲区。
在你的程序中,你在命令行输入了一个数字和一个回车符。scanf第一次得到数字,第二次从缓冲区直接读取到了回车符,就不会再等待你输入内容到缓冲区了。此时c为回车符,while (c == 'y')
自然就不成立,程序结束。
fflush就是清空缓冲区中多余字符,使得scanf等待你的输入。这个函数不是c标准库中的,可以用,当然如果考虑平台兼容性的话,可以考虑使用getchar()来读取缓冲区其他字符并丢弃,譬如:
int myflush() {
char c;
while((c = getchar()) != '\n') {
}
return 0;
}
回答2:
fflush(stdin)对输入流进行fflush,c语言标准未定义,这是盖子自己定义的。建议不要这样写。