您的位置:首页 > 编程语言 > C语言/C++

VC++程序常见错误 提示(4)---gyy整理

2013-10-17 13:26 453 查看
 与字符常量与字符串常量相关的编译错误

       字符常量是用单引号' 括起来的一个字符,如普通字符常量 'a'   '$'  等、有某些控制作用的字符常量'\n'  '\r'  '\a' 等转义字符、用3位八进制数表示的转义字符 '\101' 、用2位16进制数表示的转义字符'\x41' 等。

       只要是字符常量(不管是普通的,还是转义的),都要用单引号进行界定,除了转义字符字符,普通字符常量在单引号中只能有一个字符。 转义字符常量必须用单引号进行界定,并且单引号内的第一个字符必须是“\”来表示其是转义字符。

  

以下是关于字符常量和字符串常量中常见的相关错误:

 

  (1)在书写普通字符常量时,如果单引号内出现多个字符,编译时会出现以下错误:

   error C2015: too many characters in constant    //字符常量中的字符太多

 以下是错误案例

#include <iostream>
using namespace std;
int main()
{
cout<<'abcdefg'<<endl;
return 0;
}


编译后如图




  修改后代码




 

#include <iostream>
using namespace std;
int main()
{
cout<<'a'<<'b'<<'c'<<'d'<<'e'<<'f'<<'g'<<endl;
return 0;
}


 

错误分析:

单引号表示字符型常量。一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。

 

另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:

if (x == 'x || x == 'y') { … } 

 

值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASCii码作为一个整数(int,4B)整体看待的数字。

例如

#include <iostream>
using namespace std;
int main()
{
cout<<'abcd'<<endl;
return 0;
}


编译不出错,运行结果如下





 

运行结果并不是我们期待的abcd,要想输出abcd,可以修改程序

#include <iostream>
using namespace std;
int main()
{
cout<<"abcd"<<endl;
return 0;
}

 

 



#include <iostream>
using namespace std;
int main()
{
cout<<'a'<<'b'<<'c'<<'d'<<endl;
return 0;
}

 

 

(2)在书写普通字符常量时,如果单引号内出现0个字符,即单引号内没有任何内容,如'',尤其是输出空格字符时' '时,有时会错误书写成'',编译时会出现以下错误:

   error C2137: empty character constant //空字符常量,即字符常量中没有内容

以下是错误案例

 

#include <iostream>
using namespace std;
int main()
{
cout<<'a'<<''<<'b'<<endl;
return 0;
}


 



修改后程序,在''中加一个空格,变为' '

 

#include <iostream>
using namespace std;
int main()
{
cout<<'a'<<''<<'b'<<endl;
return 0;
}

 

(3)如果在书写时,作为字符常量界定的单引号要成对出现,若不成对,编译一定会报错。

       经常会出现以下错误:error C2001: newline in constant   //表示在常量中出现了换行

       还经常伴随错误:error C2015: too many characters in constant   
//字符常量中的字符太多


以下是错误案例-字符常量错误

#include <iostream>
using namespace std;
int main()
{
cout<<'a'<<'b'<<'c<<endl;
return 0;
}


 






     作为字符串常量界定的双引号也要成对出现,若不成对,编译一定会报错。

       经常会出现以下错误:error C2001: newline in constant   //表示在常量中出现了换行

 

以下是错误案例-字符串常量错误

#include <iostream>
using namespace std;
int main()
{
cout<<"abc<<endl;
return 0;
}


编译时出错如下图





 

 

    错误   error C2001: newline in constant   //表示在常量中出现了换行   的分析:

(1)字符串常量、字符常量中是否有换行。

(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。

(3)在这语句中,某个字符串常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。

(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。

(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: