c语言不能正确识别输入

null121 2017-09-25 11:30:26
#include<stdio.h> Double inf; Int main() {scanf(“%lf”,inf); Printf (“%lf”,inf); Return 0; }当然下面还有一些程序,我没有写,以前return 0是放在后面的,现在我给他提到前面来测试程序,编译不报错,可是我输入1时,程序返回的是0.0000,后面的程序只在主函数里用过inf的值,为什么会出现这种情况,是编译器的问题,还是我的程序在一个文件夹写的太长了导致的里面有4个自己定义的函数,600行吧,应该和大牛写的比不算长,可是出现了这个错误。我找不出原因
...全文
407 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
null121 2017-09-27
  • 打赏
  • 举报
回复
引用 12楼赵4老师 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
谢谢赵四老师的教诲,我找到了问题所在,之前有些浮躁,现在沉下心来,发现之前的自己有些幼稚。给我上了很有意义的一课
赵4老师 2017-09-27
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
destory27 2017-09-27
  • 打赏
  • 举报
回复
while(scanf("%lf", &inf) == 0){ //提示重新输入 }
null121 2017-09-26
  • 打赏
  • 举报
回复
手机码字,排版有点问题,请见谅
ForestDB 2017-09-26
  • 打赏
  • 举报
回复
先贴正确的代码吧,scanf的参数是需要地址的。
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录,输入程序名运行程序了!
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约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;
}
null121 2017-09-26
  • 打赏
  • 举报
回复
引用 4楼赵4老师 的回复:
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
是码字的错误,实际上有&,可是还是输出0.0000
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
自信男孩 2017-09-26
  • 打赏
  • 举报
回复
#include<stdio.h>

double inf;
int main()
{
    scanf("%lf", &inf);    /*少一个 &,因为第二个参数要求是地址,即inf的地址*/
    printf ("%lf",inf);

    return 0;
}
scanf参数有问题,试一下上面的修改;
沐秋之阳 2017-09-26
  • 打赏
  • 举报
回复
不知楼主是一个什么环境? 试了这个,是没有问题!(Ubuntu 12.04 32 和windows 7 64)
null121 2017-09-26
  • 打赏
  • 举报
回复
引用 4楼赵4老师 的回复:
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
我直接赋值inf为2.0就有输出,用scanf就没有输出
null121 2017-09-26
  • 打赏
  • 举报
回复
引用 3楼自信男孩 的回复:
#include<stdio.h>

double inf;
int main()
{
    scanf("%lf", &inf);    /*少一个 &,因为第二个参数要求是地址,即inf的地址*/
    printf ("%lf",inf);

    return 0;
}
scanf参数有问题,试一下上面的修改;
不行,是我码字的错误,是有&的,打字的时候没注意
大米粥哥哥 2017-09-26
  • 打赏
  • 举报
回复
输入1 在屏幕上打印的0么? return 0 返回的就是0啊
null121 2017-09-26
  • 打赏
  • 举报
回复
引用 12楼赵4老师 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
老师,你理解错了,我并不是让你看整个函数,我的意思是,想让大家帮我看看为什么我这个程序所有变量只能在程序里赋值,此时能正常运行,但是如果用scanf赋值,就不能运行,并不是这整个程序对不对,我的表达能力有所欠缺,向大家道歉,给出程序只是为了构建一个环境,并且我附上的这个程序是我简化调试过的,将无关的函数都剔除了。并不是想让大家帮我调试程序。只是想问问大家有没有遇到过这种事情。如果造成了不便,请老师原谅。
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
null121 2017-09-26
  • 打赏
  • 举报
回复
#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; } 就这个程序,编译没问题,但是运行不了。您帮我看一下,谢谢
附录c 编译程序实验 实验目的:用c语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 语法分析 C2.1 实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析. C2.2 实验要求 利用C语言编制递归下降分析程序,并对简单语言进行语法分析. C2.2.1待分析的简单语言的语法 实验目的 通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法. 实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 实验的输入和输出 输入是语法分析提供的正确的单词串,输出为三地址指令形式的四元式序列。 例如:对于语句串 begin a:=2+3*4;x:=(a+b)/c end# 输出的三地址指令如下: (1) t1=3*4 (2) t2=2+t1 (3) a=t2 (4) t3=a+b (5) t4=t3/c (6) x=t4 算法思想 1设置语义过程 (1) emit(char *result,char *arg1,char *op,char *ag2) 该函数功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: struct {char result[8]; char ag1[8]; char op[8]; char ag2[8]; }quad[20]; (2)char *newtemp() 该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,…. Char *newtemp(void) { char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } (2)主程序示意图如图c.10所示。 (2) 函数lrparser在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 语义分析程序的C语言程序框架 int lrparser() { int schain=0; kk=0; if(syn=1) { 读下一个单词符号; schain=yucu; /调用语句串分析函数进行分析/ if(syn=6) { 读下一个单词符号; if(syn=0 && (kk==0)) 输出(“success”); } else { if(kk!=1 ) 输出 ‘缺end’ 错误;kk=1;} else{输出’begin’错误;kk=1;} } return(schain); int yucu() { int schain=0; schain=statement();/调用语句分析函数进行分析/ while(syn=26) {读下一个单词符号; schain=statement(); /调用语句分析函数进行分析/ } return(schain); } int statement() { char tt[8],eplace[8]; int schain=0; {switch(syn) {case 10: strcpy(tt,token); scanner(); if(syn=18) {读下一个单词符号; strcpy(eplace,expression()); emit(tt,eplace,””,””); schain=0; } else {输出’缺少赋值号’的错误;kk=1; } return(schain); break; } } char *expression(void) {char *tp,*ep2,*eplace,*tt; tp=(char *)malloc(12);/分配空间/ ep2=(char *)malloc(12); eplace=(char *)malloc(12); tt =(char )malloc(12); strcpy(eplace,term ());/调用term分析产生表达式计算的第一项eplace/ while(syn=13 or 14) { 操作符 tt= ‘+’或者‘—’; 读下一个单词符号; strcpy(ep2,term());/调用term分析产生表达式计算的第二项ep2/ strcpy(tp,newtemp());/调用newtemp产生临时变量tp存储计算结果/ emit(tp,eplace,tt,ep2);/生成四元式送入四元式表/ strcpy(eplace,tp); } return(eplace); } char *term(void)/仿照函数expression编写/ char *factor(void) {char *fplace; fplace=(char *)malloc(12); strcpy(fplace, “ ”); if(syn=10) {strcpy(fplace,,token);/将标识符token的值赋给fplace/ 读下一个单词符号; } else if(syn=11) {itoa(sum,fplace,10); 读下一个单词符号; } else if (syn=27) {读下一个单词符号; fplace=expression();/调用expression分析返回表达式的值/ if(syn=28) 读下一个单词符号; else{输出‘}’错误;kk=1; } } else{输出‘(’错误;kk=1; } return(fplace); }

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧