为啥最后一个sacnf()函数一开始不执行呢,路过的大神进来帮忙调教下呗
一开始没执行到最后一个scanf()函数,直到输入n或是N才直接退出因为系统问题装的编译器都调试不了,所以来不耻下问了{:10_266:} {:10_266:}
#include <stdio.h>
//在一个从大到小排序的15个数中找打输入的数
//使用折半查找法
#define MAX 15
int main(void)
{
int array;
int i, j, temp, flag; //临时变量
int up, low, shuru; //上限变量 下限变量 查找数
char ch;
printf("请输入数字:\n");
scanf("%d", &array);
i = 1;
while(i < MAX)
{
scanf("%d", &array);
if(array >= array)
{
i++;
}
else
{
printf("输入的数不比前一个数小,请重新输入:");
}
}
printf("\n");
for(i = 0; i < MAX; i++)
{
printf("%5d", array);
}
flag = 1;
while(flag)
{
printf("\n请输入一个该数组中数字:");
scanf("%d", &shuru);
temp = 0; //开关变量
low = 0;
up = MAX-1;
if((shuru < array) || (shuru > array))
{
j = -1;
}
while((!temp) && (low <= up))
{
i = (up+low)/2;
if(shuru == array)
{
j = i;
printf("数字 %d 在数组元素中的第%d位!\n", shuru, j+1);
temp = 1;
}
else if(shuru < array)
{
up = i - 1;
}
else
{
low = i + 1;
}
}
if(!temp || j == -1)
{
printf("数字%d在数组中找不到!\n", shuru);
}
printf("\n是否继续查找:(Y/N)");
scanf("%c", &ch);
if(ch == 'N' || ch == 'n')
{
flag = 0;
}
}
getch();
return 0;
}
本帖最后由 BngThea 于 2018-3-12 08:56 编辑
每一个scanf后面加一句
getchar();
清理一下输入流中的回车符 后一个scanf因为是接收一个char字符,把回车吃了,没吃到Y或者是N,,在后一个scanf加一个getchar或加个头文件stdlib.h,并在后一个scanf前加一个fflush(stdin); #include <stdio.h>
#define MAX 15
int main(void)
{
int array;
int i, j, temp, flag;
int up, low, shuru;
char ch;
printf("请输入数字:");
scanf("%d", &array);
i = 1;
while(i < MAX)
{
scanf("%d", &array);
if(array >= array)
{
i++;
}
else
{
printf("输入的数不比前一个小,请重新输入:");
}
}
printf("\n");
for(i = 0; i < MAX; i++)
{
printf("%5d", array);
}
flag = 1;
while(flag)
{
printf("\n请输入一个该数组中的数字:");
scanf("%d", &shuru);
getchar();
temp = 0;
low = 0;
up = MAX-1;
if((shuru < array) || (shuru > array))
{
j = -1;
}
while((!temp) && (low <= up)&&j != -1)
{
i = (up+low)/2;
if(shuru == array)
{
j = i;
printf("数字 %d 在数组元素中的第 %d 位!\n", shuru, j+1);
temp = 1;
}
else if(shuru < array)
{
up = i - 1;
}
else
{
low = i + 1;
}
}
if(!temp || j == -1)
{
printf("数字%d在数组中找不到!\n", shuru);
}
printf("\n是否继续查找(Y/N):"); //我觉得你的代码应该改成输入n退出,任意键继续。
scanf("%c", &ch);
if(ch == 'N' || ch == 'n')
{
flag = 0;
}
}
return 0;
}这个是可以运行的,感觉还有其他问题,你可以再修改一下,更美观舒适。 代码问题就是那个scanf函数相当于接受了一个 回车键 所以,不需要你输入了
产生这个问题的原因,还是因为我给你注释部分,你只是检测了输入是不是n但是并没有检查是不是其他字符,
所以,输入任意其他字符都会继续,此时,输入的相当于回车所以,他就自动继续了。 BngThea 发表于 2018-3-12 08:32
每一个scanf后面加一句
getchar();
清理一下输入流中的回车符
一语惊醒梦中人,了解了,多谢大神调教 夜猫子侠客 发表于 2018-3-12 10:41
后一个scanf因为是接收一个char字符,把回车吃了,没吃到Y或者是N,,在后一个scanf加一个getchar或加个头 ...
说的通俗易懂,那么会教人,是不是老湿~{:10_297:} Zmynx_2017 发表于 2018-3-12 11:04
代码问题就是那个scanf函数相当于接受了一个 回车键 所以,不需要你输入了
产生这个问题的原因,还是因 ...
真是太感谢了,还劳烦修改代码{:10_301:} 关键是都对,俺就按回复时间设置为最佳哈,三楼四楼有心了{:10_254:}{:10_254:}{:10_254:}
页:
[1]