Scanf没有输入double类型的输入

时间:2017-05-17 03:51:23

标签: c

这是我正在运行的代码

#include <stdio.h>
#include <math.h>

void main()    
{
 int i=0;
 double kl,x0,x1,xk;
 printf("enter kl");
 scanf("%lf",&kl);  
 printf("hello");
 for(x1=kl;((x1-x0)>2) || ((x1-x0)<-2);x0 );  
  {
   x0=x1;
   x1=(x0/2.0)+(kl/(2.0*x0));

   }
 printf("%lf",x1); 
 printf(" %lf ",(sqrt(kl)-x1));
} 
运行scanf

没有输入。你好不打印。

1 个答案:

答案 0 :(得分:3)

问题不是scanf,它是一个无限循环(你的for循环有一个空体)。

编译器告诉你:

d:tmp diciu$ gcc -g test2.c
[..]
test2.c:11:44: warning: for loop has empty body [-Wempty-body]
 for(x1=kl;((x1-x0)>2) || ((x1-x0)<-2);x0 );  
                                           ^ this semicolon creates the empty body

for循环结束处的分号告诉编译器生成一个空主体的for循环。

在阅读代码时告诉您问题出在scanf,因为您没有看到打印出“hello”字符串,您的假设是不正确的; stdout如果缓冲并且你没有看到字符串,因为你没有刷新缓冲区;您可以通过添加行终止符(printf("hello\n"))或刷新标准输出(查找fflush)来强制缓冲区刷新。

即使您错过了编译器警告,使用调试器也很容易发现问题。