user-0 提问: c语言不能正确识别输入

回复:
user: user-0
content: 引用 12楼赵4老师 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。谢谢赵四老师的教诲，我找到了问题所在，之前有些浮躁，现在沉下心来，发现之前的自己有些幼稚。给我上了很有意义的一课

user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-2
content: while(scanf("%lf", &inf) == 0){    //提示重新输入 }

user: user-0
content: 手机码字，排版有点问题，请见谅

user: user-3
content: 先贴正确的代码吧，scanf的参数是需要地址的。

user: user-1
content: 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”  #include <stdio.h> double inf; int main() {     scanf("%lf",&inf);     printf("%lf\n",inf);     return 0; }

user: user-0
content: 引用 4楼赵4老师 的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。是码字的错误，实际上有&，可是还是输出0.0000

user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-4
content: #include<stdio.h>  double inf; int main() {     scanf("%lf", &inf);    /*少一个 &，因为第二个参数要求是地址，即inf的地址*/     printf ("%lf",inf);      return 0; } scanf参数有问题，试一下上面的修改；

user: user-5
content: 不知楼主是一个什么环境？  试了这个，是没有问题！（Ubuntu 12.04 32 和windows 7 64）

user: user-0
content: 引用 4楼赵4老师 的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。我直接赋值inf为2.0就有输出，用scanf就没有输出

user: user-0
content: 引用 3楼自信男孩 的回复:#include<stdio.h>  double inf; int main() {     scanf("%lf", &inf);    /*少一个 &，因为第二个参数要求是地址，即inf的地址*/     printf ("%lf",inf);      return 0; } scanf参数有问题，试一下上面的修改；不行，是我码字的错误，是有&的，打字的时候没注意

user: user-6
content: 输入1 在屏幕上打印的0么? return 0 返回的就是0啊

user: user-0
content: 引用 12楼赵4老师 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。老师，你理解错了，我并不是让你看整个函数，我的意思是，想让大家帮我看看为什么我这个程序所有变量只能在程序里赋值，此时能正常运行，但是如果用scanf赋值，就不能运行，并不是这整个程序对不对，我的表达能力有所欠缺，向大家道歉，给出程序只是为了构建一个环境，并且我附上的这个程序是我简化调试过的，将无关的函数都剔除了。并不是想让大家帮我调试程序。只是想问问大家有没有遇到过这种事情。如果造成了不便，请老师原谅。

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: #include <stdio.h> #include <math.h> #define max 100 #define p 3.1415926  int n=5; char ex[max]; double x; double ret=10; double epsllon=0.0001; double compvalue(); void trans(); double PolynomialLegendre(); double derva(); double Pn; double DPn; double val=0;     int main() { double dn=1; double up; double x1,x0; int i; double AK; double xn; double add; double cut; scanf("%lf",&up); add=dn+up; cut=dn-up; for(i=1;i<=n;i++)    {     x0=cos(p*(i-(1.0/4.0))/(n+(1.0/2.0)));     do{     x=(add+cut*x0)/2.0;     PolynomialLegendre();     derva();     xn=x0-(Pn)/(DPn);     x1=x0;     x0=xn;     }     while(xn-x1>=epsllon||xn-x1<=(-epsllon));     x=xn;     n=n-1;     PolynomialLegendre();     n=n+1;     derva();     AK=(2.0/n)*(1.0/(Pn*DPn));     val=val+ret*AK;}     printf("\n %lf \n",val);     return 0;}  double PolynomialLegendre() {  double k=1;  double P0,P1;  P0=1;  P1=x;  if(n==0){Pn=P0;return Pn;}  if(n==1){Pn=P1;return Pn;}  for(k=2;k<=n;k++)  {Pn=((2.0*k-1.0)*x*P1-(k-1.0)*P0)/k;  P0=P1;  P1=Pn;}  return Pn;  }   double derva()   {int k;   double DP0,DP1,Pn,P0,P1;   P0=1;   P1=x;   if(n==0){Pn=P0;return DPn;}   if(n==1){Pn=P1;return DPn;}   for(k=2;k<=n;k++)  {   Pn=((2.0*k-1.0)*x*P1-(k-1.0)*P0)/k;   P0=P1;   P1=Pn;   DPn=k*(x*P1-P0)/(x*x-1.0);   DP0=DP1;   DP1=DPn;   }   return DPn;   } 就这个程序，编译没问题，但是运行不了。您帮我看一下，谢谢