当前位置:文档之家› c常见错误有例子

c常见错误有例子

但C语言中,“=”是赋值运算符,“==”才是关系运算符。如:
if (a == 3)
a = b;
a == 3是比较a是否等于3;而a = b;表示把b的值赋给a。初学者往往会把a == 3错写成a = 3,这样写是符合语法的,但是不符合我们的期望。如果错写成了a = 3,有些编译器会给出警告。
9
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
Case syntax error Case 语法错误
Code has no effect代码不可述不可能执行到
Compound statement missing{分程序漏掉"{"
Conflicting type modifiers不明确的类型说明符
Constant expression required要求常量表达式
printf( "%d", a[10] );
return 0;
}
C语言规定:定义时如果用a[10],则表示数组a有10个元素,其下标值范围为0到9。a[10]不属于上面定义的数组中。对a[10]进行赋值可能导致程序崩溃!
错误信息:
warning C4700: uninitialized local variable 'a' used
错误信息:
error C2440: '=' : cannot convert from 'const char [2]' to 'char'
‘=’的左边是字符类型,右边是常量char[2],不能完成赋值操作
8
许多高级语言都使用“=”符号作为关系运算符的“等于”。如BASIC程序中可以写:
if ( a = 3 ) then…
printf( "<60\n" );
default:
printf( "error\n" );
}
由于漏写了break语句,当grade值为A时,printf函数在执行完第一个语句后会接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如:
case 'A':
printf( "85~100\n" );
scanf( "%d,%d", &a, &b );
此时不用逗号而用空格或其它字符是不对的。例如:3:4。又如:
scanf("a=%d,b=%d",&a,&b);
输入应如以下形式:
a=3,b=4
13
例如,a定义为整型,b定义为浮点型
#include <stdio.h>
void main()
{
int a = 3;
voidmain ()
{
char x;
x=300;
}
300的二进制为0b100101100,赋值给x时,将赋值最后的8位,高位截去,因此x的值实际上为0b101100(即整数44)。如果将500赋给一个有符号的字符型变量时,变量内存储的值还会变成负数,由读者自行分析原因。
错误信息:
warning C4309: '=' : truncation of constant value
4
例如:
#include <stdio.h>
void main()
{
inti =0;
int sum=0;
while(i<10)
i++;
sum=sum+i;
}
本程序的目的是计算0到90的累加,但是在循环while的后面少加了花括号,累加的操作并没有在循环中执行。应该修改成这样:
while(i<10)
{
Constant out of range in comparison 在比较中常量超出范围
使用没有初始化的变量。这里指a[10]。
1
#include <stdio.h>
void main()
{
char s[100];
scanf( "%99s", &s );
}
C语言中,数组名代表该数组的起始地址。因此上面的代码中,s本身就已经是一个地址了,我们不需要再对它进行取址运算。正确的写法应该是:scanf( "%99s", s );
i++;
sum = sum + i;
}
5
voidmain()
{
int a = 5;
printf( "%d", A );
}
编译器认为a和A是两个不同的变量名,而显示出错信息。C语言规定大写字母和小写字母是不同的字符;而有些编程语言是不分大小写的。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
Bit field too large 位字段太长
Call of non-function 调用未定义的函数
Call to function with no prototype 调用函数时没有函数的说明
Cannot modify a const object 不允许修改常量对象
Case outside of switch 漏掉了case 语句
float b = 4.5;
printf( "%f%d\n", a, b );
}
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。应该改成:
printf( "%d%f\n", a, b );
1
#include<stdio.h>
void main()
{
scanf( "%7.2f", &a );
{
int a = 0, i;
scanf( "%d", &i );
do
{
a += i;
++i;
} while ( i <= 10 );
printf( "%d", a );
}
可以看到,当输入i的值小于或等于10时,二者得到的结果相同。而当i>10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环的循环体一次也不执行,而do-while语句则要执行一次。
void main( )
{
int a, b;
a = 1
b = 2;
}
编译时,编译器发现“a =1”后面没有分号,就会报错。改错时,如果在编译器所说的有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
错误信息:
error C2146: syntax error : missing ';' before identifier 'b'
y没有定义
2
例如:
#include <stdio.h>
voidmain()
{
int i;
int sum;
i = 5;
Sum = sum+i;
}
错误信息
warning C4700: uninitialized local variable 'sum' used
‘sum’在使用前没有初始化
3
例如:
#include <stdio.h>
错误信息:
error C2065: 'A' : undeclared identifier
‘A’没有定义而直接使用
error C3861: 'printf': identifier not found
没有找到‘printf’的定义。Printf是一个输出函数,定义在stdio.h中。在源程序的开始需要添加#include”stdio.h”
在’b’前面缺少’;’
10
#include <stdio.h>
void main()
{
printf( "Hello world.\n");
};
上面代码中,大括号}后面的分号(;)是毫无必要的!因为单独一个;也是合法的C语言语句,所以}后面写了;也是合法的,但是毫无必要!又如:
#include <stdio.h>
Bad character in paramenters 参数中有不适当的字符
Bad file name format in include directive 包含命令中文件名格式不正确
Bad ifdef directive synatax 编译预处理ifdef有语法错
Bad undef directive syntax编译预处理undef有语法错
break;
1
(1)
#include <stdio.h>
voidmain()
{
int a = 0, i;
scanf( "%d", &i );
while ( i <= 10 )
{
a += i;
++i;
}
printf( "%d", a );
}
(2)
#include <stdio.h>
voidmain()
6
#include <stdio.h>
voidmain()
{
float a, b;
printf( "%d", a % b );
相关主题