这是我正在运行的代码
#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
后没有输入。你好不打印。
答案 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
)来强制缓冲区刷新。
即使您错过了编译器警告,使用调试器也很容易发现问题。