清华大学出版社 TSINGHUA UNIVERSITY PRESS scanf(%od, %d",&a, &b: ·(6)误把“=”作为“等于”比较符。 在许多高级语言中,用“=”符号作为关系运算符 “等于”。例如,在 BASIC或 PASCAL程序中都 可以写 if(a=b)then. 但在C语言中,“=”是赋值运算符,“==”才是关 系运算符“等于”。如果写成 if(a=b printf(a equal to b) C编译系统将(a=b)作为赋值表达式处理,将b的值 赋给a,然后判断a的值是否零,若为非零,则作 为“真”;若为零作为假。如果a的值为3,b的值 为4
• scanf("%d,%d",&a,&b); • (6) 误把“=”作为“等于”比较符。 • 在许多高级语言中,用“=”符号作为关系运算符 “等于”。例如,在BASIC或PASCAL程序中都 可以写 • if(a=b) then… • 但在C语言中,“=”是赋值运算符,“==”才是关 系运算符“等于”。如果写成 • if(a=b) printf("a equal to b"); • C编译系统将(a=b)作为赋值表达式处理,将b的值 赋给a,然后判断a的值是否零,若为非零,则作 为“真”;若为零作为假。如果a的值为3,b的值 为4
清华大学出版社 TSINGHUA UNIVERSITY PRESS a≠b,按原意不应输出“ ae q u a It ob”。而现在 先将b的值赋给a,a也为4,赋值表达式的值为4。 i语句中的表达式值为真(非零),因此输出“aeq u a It o b”。 这种错误在编译时是检查不出来的,但运行结果 往往是错的。而且由于习惯的影响,程序设计者 自己往往也不易发觉。 (7)语句后面漏分号。 C语言规定语句末尾必须有分号。分号是C语句不 可缺少的一部分。这也是和其他语言不同的。有 的初学者往往忘记写这一分号。如:
a≠b,按原意不应输出“ae q u a lt ob”。而现在 先将b的值赋给a,a也为4,赋值表达式的值为4。 if语句中的表达式值为真(非零),因此输出“ae q u a lt o b”。 • 这种错误在编译时是检查不出来的,但运行结果 往往是错的。而且由于习惯的影响,程序设计者 自己往往也不易发觉。 • (7) 语句后面漏分号。 • C语言规定语句末尾必须有分号。分号是C语句不 可缺少的一部分。这也是和其他语言不同的。有 的初学者往往忘记写这一分号。如:
清华大学出版社 TSINGHUA UNIVERSITY PRESS a=3 b=4 编译时,编译程序在“a=3”后面未发现分号,就 把下一行“b=4”作为上一行的语句的一部分, 这就出现语法错误。有时编译时指出某行有错, 但在该行上并未发现错误,应该检查上一行是否 漏了分号。 如果用复合语句,有的学过 PASCAL语言的读者 往往漏写最后一个语句的分号,如: {t=a; a=b;
• a=3 • b=4 • 编译时,编译程序在“a=3”后面未发现分号,就 把下一行“b=4”也作为上一行的语句的一部分, 这就出现语法错误。有时编译时指出某行有错, 但在该行上并未发现错误,应该检查上一行是否 漏了分号。 • 如果用复合语句,有的学过PASCAL语言的读者 往往漏写最后一个语句的分号,如: {t=a; a=b; b=t }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 在 PASCAL中分号是两个语句间的分隔符而不是语 句的一部分,而在C中,没有分号的就不是语句。 (8)在不该加分号的地方加了分号。 例如 if(a> b) printf(a is larger than bIn"); 本意为当a>b时输出“ a is larger than b”的信 但由于在f(a>b)后加了分号,因此i语句到此结束 即当(a>b)为真时,执行一个空语句。本来想ab 时不输出上述信息,但现在prin函数语句并不从 属于i语句,而是与i语句平行的语句。不论
• 在PASCAL中分号是两个语句间的分隔符而不是语 句的一部分,而在C中,没有分号的就不是语句。 • (8) 在不该加分号的地方加了分号。 • 例如: • if(a>b); • printf("a is larger than b\n"); • 本意为当a>b时输出“a is larger than b”的信 息。 • 但由于在if(a>b)后加了分号,因此if语句到此结束。 即当(a>b)为真时,执行一个空语句。本来想a≤b 时不输出上述信息,但现在printf函数语句并不从 属于if语句,而是与if语句平行的语句。不论
清华大学出版社 TSINGHUA UNIVERSITY PRESS a>b还是a≤b,都输出“ a is larger than b 又如: for(i=0;i<10;i++) iscanf("%d",&x); printf(odn",x*x); 本意为先后输入10个数,每输入一个数后输出它 的平方值。由于在for()后加了一个分号,使循 环体变成了空语句。只能输入一个整数并输出它 的平方值 总之,在i、for、 while语句中,不要画蛇添足多 加分号
a>b还是a≤b,都输出“a is larger than b”。 • 又如: for(i=0;i<10;i++); {scanf("%d",&x); printf("%d\n",x*x); } • 本意为先后输入10个数,每输入一个数后输出它 的平方值。由于在for( )后加了一个分号,使循 环体变成了空语句。只能输入一个整数并输出它 的平方值。 • 总之,在if、for、while语句中,不要画蛇添足多 加分号