这个程序哪里错了,流水灯c语言程序

&&/&&&&/&&
C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下&灵活的余地&,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。
1、书写标识符时,忽略了大小写字母的区别。
  int a=5;
  printf(&%d&,A);
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2、忽略了变量的类型,进行了不合法的运算。
  float a,b;
  printf(&%d&,a%b);
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行&求余&运算。
3、将字符常量与字符串常量混淆。
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以&\&作字符串结束标志,它是由系统自动加上的,所以字符串&a&实际上包含两个字符:&a'和&\0',而把它赋给一个字符变量是不行的。
4、忽略了&=&与&==&的区别。
在许多高级语言中,用&=&符号作为关系运算符&等于&。如在BASIC程序中可以写
if (a=3) then &
但C语言中,&=&是赋值运算符,&==&是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5、忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
编译时,编译程序在&a=1&后面没发现分号,就把下一行&b=2&也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
  z=x+y;
  t=z/100;
  printf(&%f&,t);
  对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6、多加分号。
  对于一个复合语句,如:
  z=x+y;
  t=z/100;
  printf(&%f&,t);
复合语句的花括号后不应再加分号,否则将会画蛇添足。又如:
if (a%3==0);
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。再如:
for (I=0;I&5;I++);
{scanf(&%d&,&x);
printf(&%d&,x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7、输入变量时忘记加地址运算符&&&。
scanf(&%d%d&,a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。&&a&指a在内存中的地址。
8、输入数据的方式与要求不符。
①scanf(&%d%d&,&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf(&%d,%d&,&a,&b);
C规定:如果在&格式控制&字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
此时不用逗号而用空格或其它字符是不对的。
& & 3 4 3:4
& & scanf(&a=%d,b=%d&,&a,&b);
输入应如以下形式:
& & a=3,b=4
9、输入字符的格式与要求不一致。
在用&%c&格式输入字符时,&空格字符&和&转义字符&都作为有效字符输入。
& & scanf(&%c%c%c&,&c1,&c2,&c3);
如输入a b c
字符&a&送给c1,字符& &送给c2,字符&b&送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10、输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
& & a=3;b=4.5;
& & printf(&%f%d\n&,a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
11、输入数据时,企图规定精度。
& & scanf(&%7.2f&,&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
  case 'A':printf(&85~100\n&);
  case 'B':printf(&70~84\n&);
  case 'C':printf(&60~69\n&);
  case 'D':printf(&&60\n&);
  default:printf(&error\n&);
由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上&&。例如
case 'A':printf(&85~100\n&);
13、忽视了while和do-while语句在细节上的区别。
{int a=0,I;
scanf(&%d&,&I);
while(I&=10)
printf(&%d&,a);
{int a=0,I;
scanf(&%d&,&I);
}while(I&=10);
printf(&%d&,a);
可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I&10时,二者结果就不同了。因为while循环是先判断后执行,而do- while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14、定义数组时误用变量。
scanf(&%d&,&n);
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
15、在定义数组时,将定义的&元素个数&误认为是可使的最大下标值。
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf(&%d&,a[10]);
C语言规定:定义时用a[10],表示a数组有10个元素。其下标值由0开始,所以数组元素a[10]是不存在的。
17、在不应加地址运算符&的位置加了地址运算符。
& & scanf(&%s&,&str);
C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:
& & scanf(&%s&,str);
18、同时定义了形参和函数中的局部变量。
int max(x,y)
int x,y,z;
  z=x&y?x:y;
  return(z);
  形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
  z=x&y?x:y;
  return(z);
推荐文章 TOP10求高人指点C语言这个程序哪错了(我是初学者,不是太懂,简明一些)_百度知道
求高人指点C语言这个程序哪错了(我是初学者,不是太懂,简明一些)
c,c=%d\main(){}if(b&gt.h&}if(a&;):\c=t,b,b=%d;n&if(a&gt,a;;%d:a=%d;c),b;b);n&quot,c=%d&#92,简明一些)#include&lt,b=%d,a;c);b=c;n&quot,%d;printf(&quot:a=%d;{t=b;a=c,不是太懂,c),%d&printf(&{t=a,b;c=t;b=a;{t=a,a,c)求高人指点C语言这个程序哪错了(我是初学者;,t;scanf(&pleasea=b,b;}printf(&quot,c);stdio
for (i=0;i++)
a[i]=a[i+1],c);%d;;n,a;i++)
if (a[i]&/i&
printf(&i&lt,j;/n;
a[i+1]=temp,temp,%d;i++)
scanf (&%5d,学习语言同时也要学习解决问题的能力;n-1-j,b,&a[i]);;i&%d;n-1,a[i] );for(j=0,&书上看看应该怎么写冒泡排序a[i+1])
temp=a[i];int a[n];n&quot。scanf(&quot哪里错了放编译器里跑一下就知道了;\),%d&for(i=0;j&;
}}for(i=0,&quot
其他类似问题
为您推荐:
其他6条回答
}if(b&%d%d%d&quot,a;,c=%d\b=c,a;a=b,&b&c):①scanf(&before sort,c),b=%d;c=t;if(a&scanf(&quot,&b;}具体修改内容; if(b&}if(a&gt,c=%d&#92,b,b,&a; 之后的;n&n&,&a;printf(&c),c,a,b,b:#include&}printf(&c){t=b,t;b);b=a;改为scanf(&printf(&c){t=a,b=%d;c):&#92:a=%d,%d,c);n&),&c);main(){%d%d%d&%d; if(a&②删除if(a&gt.h&;a=c;please,c);修改结果:a=%d,%d&c=t;b){t=a
这个是在求abc大小顺序的吗? 错误的地方看注释吧;我说的只供参考;#include&stdio.h&main(){int a,b,c,t;printf(&please input three numbers:\n&);scanf(&%d,%d,%d&,a,b,c);//”%d%d%d“, &a, &b, &cprintf(&before sort:a=%d,b=%d,c=%d\n&,a,b,c);if(a&b);{t=a;a=b;b=a;}if(a&c);{t=a;a=c;c=t;}if(b&c);{t=b;b=c;c=t;}printf(&after sort:a=%d,b=%d,c=%d\n&,a,b,c);}//我不是很了解算法,不过这个求大小看起来相当的费劲;最后对于 mian定义为 int mian(void)最后记得返回;即return 0;
scanf(&%d,%d,%d&,a,b,c);基本功啊,scanf是对地址进行操作的,所以abc前面要加&取地址符
scanf(&%d,%d,%d&,a,b,c); 这句有误。应该是:scanf(&%d,%d,%d&,&a,&b,&c); scanf(...)中的变量必须送地址才行。
个人觉得,前面两位结合下应该差不多了吧,main里面return 0貌似会警告、、
scanf语句要加上地址符&
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁这个程序哪里出现语法错误了,求C语言高手解答,在线等。程序和报错的提示都在这了,麻烦大家。_百度知道
这个程序哪里出现语法错误了,求C语言高手解答,在线等。程序和报错的提示都在这了,麻烦大家。
提问者评价
其他类似问题
为您推荐:
c语言的相关知识
其他3条回答
&= 中间不能有空格的
&= 中间不能有空格的
小于等于中间不能有空格 &= 你的乘号用的是中文的乘号吧
* 改为 * pow()函数用法不对,不知道你在不在。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分4阅读权限10帖子精华可用积分4 信誉积分26 专家积分0 在线时间11 小时注册时间最后登录
白手起家, 积分 4, 距离下一级还需 196 积分
帖子主题精华可用积分4 信誉积分26 专家积分0 在线时间11 小时注册时间最后登录
论坛徽章:0
下面这个程序怎么调都不对,希望大家帮帮忙
#include&stdio.h&
10:26 上传
错误的原因
#include&malloc.h&
#include&string.h&
#include&time.h&
typedef struct seedoctor{
char data[100]; /*数据域*/
struct seedoctor */*指针域 */
}/*键队列节点类型 */
typedef struct{
seetype *front,*}
/*键队类型 */
#define null 0
/*登陆界面*/
void jiemian()
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t****& &病人就医管理系统& &****\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
/*设置密码 */
void cipher()
printf(&\t请输入密码:&);
scanf(&\t%d&,&a);
for(i=1;i&3;i++)
if(a!=123)
{printf(&\t密码错误!请重新输入:&);
scanf(&\t%d&,&a);}
if(a!=123)
printf(&\t登录失败/n&);
printf(&登陆成功\n&);}
void welcome()
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t****& &病人就医管理系统& &****\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
printf(&\t*****************************\n&);
/*主要功能*/
void module()
printf(&\t主要功能如下:\n&);}
/*功能的实现*/
void seedoctor()
int sel,flag=1;
linkqueue *
seetype *s;
char number[100];
lq=(linkqueue *)malloc(sizeof(linkqueue));
lq-&front=(seetype *)malloc(sizeof(seetype));
lq-&front-&next=
lq-&rear=lq-&
while(flag==1)}
/*主要模块*/
printf(&\t*******************************\n&);
printf(&\t*******************************\n&);
printf(&\t*********&&1&&2&&3&&4&&********\n&);
printf(&\t** 排队&&就诊&&查看排队&&下班**\n&);
printf(&\t请选择:&);
scanf(&\t%d&,&sel);
switch(sel)}
/*患者排队 */
textbackground(11);
printf(&\t********************\n&);
printf(&\t********************\n&);
printf(&\t输入患者病历号\n&);
scanf(&\t%s&,number);
s=(seetype *)malloc(sizeof(seetype));
strcpy(s-&data,number);
lq-&rear-&next=s;
lq-&rear==s;
/*患者就诊 */
if(lq-&front=lq-&rear)
printf(&\t没有排队的患者\n&);
s=lq-&front-&
if(lq-&rear==s)
lq-&rear=lq-&
printf(&\t患者%s就诊\n&,s-&data);
lq-&front-&next=s-&
/*查看排队 */
if(lq-&front==lq-&rear)
printf(&\t没有排队的患者\n&);
s=lq-&front-&
printf(&\t排队患者:\n&);
while(s!=null)
printf(&\t%s&,s-&data);
printf(&\n&);
if(lq-&front!=lq-&rear)
{printf(&\t请排队的患者明天就诊\n&);
/*退出系统*/
void end()
& & printf(&\t**************************\n&);
& & printf(&\t**************************\n&);
& & printf(&\t**************************\n&);
& & printf(&\t 谢谢使用病人就医管理系统 \n&);
& &&&printf(&\t**************************\n&);
& & printf(&\t**************************\n&);
& & printf(&\t**************************\n&);
/*主函数 */
void main()
system(&graftabl936&);
textbackgroud(11);
textcolor(11);
jiemian();
welcome();
seedoctor();
for(i=i&l;i++)
syetem(&cls&);
t=time(null);
printf(&%d%d%d\n&);
printf(ctime(&t));
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分6阅读权限10帖子精华可用积分6 信誉积分47 专家积分0 在线时间16 小时注册时间最后登录
白手起家, 积分 6, 距离下一级还需 194 积分
帖子主题精华可用积分6 信誉积分47 专家积分0 在线时间16 小时注册时间最后登录
论坛徽章:0
第67行while后面}应该放到第66行尾吧
UID空间积分0 积分1243阅读权限30帖子精华可用积分1243 信誉积分1294 专家积分0 在线时间1771 小时注册时间最后登录
家境小康, 积分 1243, 距离下一级还需 757 积分
帖子主题精华可用积分1243 信誉积分1294 专家积分0 在线时间1771 小时注册时间最后登录
论坛徽章:11
好吧。。无语了~~
UID空间积分0 积分156898阅读权限100帖子精华可用积分156898 信誉积分3786 专家积分55 在线时间5851 小时注册时间最后登录
帖子主题精华可用积分156898 信誉积分3786 专家积分55 在线时间5851 小时注册时间最后登录
论坛徽章:87
& & 有这发贴的工夫,仔细看看那个67行,你自己早就应该能发现问题的所在了。
I can explain it for you, but I can’t understand it for you.
UID空间积分0 积分22阅读权限10帖子精华可用积分22 信誉积分80 专家积分0 在线时间24 小时注册时间最后登录
白手起家, 积分 22, 距离下一级还需 178 积分
帖子主题精华可用积分22 信誉积分80 专家积分0 在线时间24 小时注册时间最后登录
论坛徽章:0
用dev-c++就是给自己找麻烦。
推荐c-free(也好老了),codeblocks和vs。。。
虽然不喜欢太重的IDE,但是还得说vs确实比较生猛。。。
UID空间积分0 积分63阅读权限10帖子精华可用积分63 信誉积分391 专家积分0 在线时间203 小时注册时间最后登录
白手起家, 积分 63, 距离下一级还需 137 积分
帖子主题精华可用积分63 信誉积分391 专家积分0 在线时间203 小时注册时间最后登录
论坛徽章:3
编译器给的错误信息不是很明显么? 花括号用错地方了

我要回帖

更多关于 c语言应用程序错误 的文章

 

随机推荐