求教C中scanf用法的问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 18:58:44
在程序中用scanf时为何出现被声明为否决的警告。并且在输入后输出与所输入不同的数值。所输入数字并未有溢出情况。
#include "s4.h"
int FIND(double F[],double x,int n)
{
int mid,bottom=0;
int top=n-1;
while(bottom<=top)
{
mid=(top+bottom)/2;
if(fabs(F[mid]-x)<0.00001)
return 1;
else if(F[mid]<x)
bottom=mid+1;
else
top=mid-1;
}
return 0;
}

void find()
{
double F[10],num;
int i,c;
printf("请从小到大输入10个数:\n");
for(i=0;i<10;i++)
scanf("%f",&F[i]);
printf("\n所输入的数组为:\n");
for(i=0;i<10;i++)
{
printf("%f",F[i]);

}
printf("请输入要从上述数组中要查找的数:");
scanf("%f",&num);
c=FIND( F,num,10);
if(c)
{
for(i=0;i<10;i++)
{
if((F[i]-num)<0.00001)
{
printf("F[%d]=%f",i,num);
break;
}

代码,有可能是输入的格式有问题

scanf("%lf",&F[i]); //输入DOUBLE要用lf

还有输出也一样,最好用lf,自己改

要你全改,你就偏偏我改哪你改哪,另外把你的算法改了一下,FIND返回的是找到的地址

你原来的算法没有错,只是比较麻烦,而且最后输出第几个的地方有问题,你忘了取绝对值了

if(fabs(F[i]-num)<0.00001) //这个地方少一个绝对值函数fabs

#include<stdio.h>
#include<math.h>
int FIND(double F[],double x,int n)
{
int mid,bottom=0;
int top=n-1;
while(bottom<=top)
{
mid=(top+bottom)/2;
if(fabs(F[mid]-x)<0.00001)
return mid;
else
if(F[mid]<x)
bottom=mid+1;
else
top=mid-1;
}
return -1;
}

int main()
{
double F[10],num;
int i,c;
printf("请从小到大输入10个数:\n");
for(i=0;i<10;i++)
scanf("%lf",&F[i]);
printf("\n所输入的数组为:\n");
for(i=0;i<10;i++)
{
printf("%lf\t",F[i]); <