c常见错误有例子

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
错误信息:
error C2065: 'A' : undeclared identifier
‘A’没有定义而直接使用
error C3861: 'printf': identifier not found
没有找到‘printf’的定义。Printf是一个输出函数,定义在stdio.h中。在源程序的开始需要添加#include”stdio.h”
11
#include <stdio.h>
void main()
[
int a, b;
scanf( "%d %d", a, b );
}
这样写是错误的!应该改成scanf( "%d %d", &a, &b );
12
scanf( "%d %d", &a, &b );
输入时,不能用逗号作两个数据间的分隔符。例如:3, 4。而要使用空格、回车或者tab键作为分隔符。例如:3 4。如果我们想用逗号(,)来做分隔符,可以这样写:
在’b’前面缺少’;’
10
#include <stdio.h>
void main()
{
printf( "Hello world.\n");
};
上面代码中,大括号}后面的分号(;)是毫无必要的!因为单独一个;也是合法的C语言语句,所以}后面写了;也是合法的,但是毫无必要!又如:
#include <stdio.h>
附录
Ambiguous operators need parentheses 不明确的运算需要用括号括起
Ambiguous symbol 'xxx' 不明确的符号
Argument list syntax error 参数表语法错误
Array bounds missing 丢失数组界限符
Array size toolarge 数组尺寸太大
6
#include <stdio.h>
voidmain()
{
float a, b;
printf( "%d", a % b );
}
%是求余运算符,a % b的结果是a除以b的余数。只有%左右两边的操作数都是整型时,才可以进行求余运算。故而上面的程序是错误的,因为a和b是浮点型变量。
错误信息:
error C2296: '%' : illegal, left operand has type 'float'
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()
1
int n = 6;
int a[n];
C99以前,数组名后用方括号括起来必须是常量,包括常量表达式。但是在最新的C99标准中,上面的代码是正确无误的。如果您的编译器不支持C99,那么上面的代码不能通过编译。
1
#include <stdio.h>
voidmain()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
但C语言中,“=”是赋值运算符,“==”才是关系运算符。如:
if (a == 3)
a = b;
a == 3是比较a是否等于3;而a = b;表示把b的值赋给a。初学者往往会把a == 3错写成a = 3,这样写是符合语法的,但是不符合我们的期望。如果错写成了a = 3,有些编译器会给出警告。
9
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
printf( "%d", a[10] );
return 0;
}
C语言规定:定义时如果用a[10],则表示数组a有10个元素,其下标值范围为0到9。a[10]不属于上面定义的数组中。对a[10]进行赋值可能导致程序崩溃!
错误信息:
warning C4700: uninitialized local variable 'a' used
y没有定义
2
例如:
#include <stdio.h>
vபைடு நூலகம்idmain()
{
int i;
int sum;
i = 5;
Sum = sum+i;
}
错误信息
warning C4700: uninitialized local variable 'sum' used
‘sum’在使用前没有初始化
3
例如:
#include <stdio.h>
void main()
{
int a = 2;
intI= 0;
if ( a % 3 == 0 );
i++;
}
程序员的本意是如果3整除a,则i加1。但由于if ( a % 3 == 0 )后加了分号,则if语句到此结束。不论3是否整除a,程序都会执行i++;语句。
错误信息:
warning C4390: ';' : empty controlled statement found; is this the intent?
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;
printf( "<60\n" );
default:
printf( "error\n" );
}
由于漏写了break语句,当grade值为A时,printf函数在执行完第一个语句后会接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如:
case 'A':
printf( "85~100\n" );
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 );
Bit field too large 位字段太长
Call of non-function 调用未定义的函数
Call to function with no prototype 调用函数时没有函数的说明
Cannot modify a const object 不允许修改常量对象
Case outside of switch 漏掉了case 语句
错误信息:
error C2440: '=' : cannot convert from 'const char [2]' to 'char'
‘=’的左边是字符类型,右边是常量char[2],不能完成赋值操作
8
许多高级语言都使用“=”符号作为关系运算符的“等于”。如BASIC程序中可以写:
if ( a = 3 ) then…
C
Email azhar1117@163.com
1
例如:
voidmain ()
{
x=3;
y=x;
}
在上式中看似正确,实际上却没有定义变量x和y的类型。C语言规定,所有的变量必须先定义,后使用。
错误信息:
error C2065: 'x' : undeclared identifier
x没有定义
error C2065: 'y' : undeclared identifier
发现一条空操作语句。
再如:
#include <stdio.h>
void main()
{
int i;
intx;
for ( i = 0; i < 5; i++ ) ;
{
scanf( "%d", &x );
printf( "%d", x );
}
}
程序员的本意是先后输入5个数,每输入一个数后再将它输出。但由于for ()后加了一个分号,循环体变为空语句;。空语句;执行5次后,下面的程序块才开始执行,导致的结果是只能输入一个数并输出它。
void main( )
{
int a, b;
a = 1
b = 2;
}
编译时,编译器发现“a =1”后面没有分号,就会报错。改错时,如果在编译器所说的有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
错误信息:
error C2146: syntax error : missing ';' before identifier 'b'
4
例如:
#include <stdio.h>
void main()
{
inti =0;
int sum=0;
while(i<10)
i++;
sum=sum+i;
}
本程序的目的是计算0到90的累加,但是在循环while的后面少加了花括号,累加的操作并没有在循环中执行。应该修改成这样:
while(i<10)
{
}
这样做是不合法的,输入数据时不能规定精度。
1
例如:根据考试成绩的等级打印出百分制数段。
switch ( grade )
{
case 'A':
printf( "85~100\n" );
case 'B':
printf( "70~84\n" );
case 'C':
printf( "60~69\n" );
case 'D':
voidmain ()
{
char x;
x=300;
}
300的二进制为0b100101100,赋值给x时,将赋值最后的8位,高位截去,因此x的值实际上为0b101100(即整数44)。如果将500赋给一个有符号的字符型变量时,变量内存储的值还会变成负数,由读者自行分析原因。
错误信息:
warning C4309: '=' : truncation of constant value
%的左边操作数的类型是浮点
error C2297: '%' : illegal, right operand has type 'float'
%的右边操作数的类型是浮点
7
#include <stdio.h>
void main ()
{
char c;
c = "a";
}
这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C语言规定以\0作字符串常量的结束标志,它是由系统自动加上的,所以"a"实际上包含两个字符:'a'和'\0'。所以把"a"赋给字符变量是不行的。
Bad character in paramenters 参数中有不适当的字符
Bad file name format in include directive 包含命令中文件名格式不正确
Bad ifdef directive synatax 编译预处理ifdef有语法错
Bad undef directive syntax编译预处理undef有语法错
Case syntax error Case 语法错误
Code has no effect代码不可述不可能执行到
Compound statement missing{分程序漏掉"{"
Conflicting type modifiers不明确的类型说明符
Constant expression required要求常量表达式
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 );
{
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语句则要执行一次。
i++;
sum = sum + i;
}
5
voidmain()
{
int a = 5;
printf( "%d", A );
}
编译器认为a和A是两个不同的变量名,而显示出错信息。C语言规定大写字母和小写字母是不同的字符;而有些编程语言是不分大小写的。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
相关文档
最新文档