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

 与字符常量与字符串常量相关的编译错误

       字符常量是用单引号' 括起来的一个字符,如普通字符常量 '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码作为一个整数(int4B)整体看待的数字。

例如

#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)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值